Ruby-If-Else语句(三角形测试)

Ruby-If-Else语句(三角形测试),ruby,math,if-statement,geometry,Ruby,Math,If Statement,Geometry,问题是创建一个函数,该函数接受三个数字作为输入,并根据这三个数字是否可以形成三角形返回true或false。如果任意两条边的和大于第三条边,三个数字可以形成一个三角形 我的答案是: def is_triangle(a,b,c) if a+b > c return true elsif a+c>b return true elsif b+c>a return true else return false end end 问题

问题是创建一个函数,该函数接受三个数字作为输入,并根据这三个数字是否可以形成三角形返回true或false。如果任意两条边的和大于第三条边,三个数字可以形成一个三角形

我的答案是:

def is_triangle(a,b,c)

  if a+b > c
    return true
  elsif a+c>b
    return true
  elsif b+c>a
    return true
  else
    return false
  end
end

问题是:我假设的虚假回报一直都是真实的。请帮忙

您传递给此的任何内容都不会返回false。你的方法是错误的


通过找到最长的边,然后将剩余的两条边相加,可以判断三条边是否构成三角形。如果它们大于最长的边,那么这些边就可以生成一个traingle。

传递到其中的任何内容都不会返回false。你的方法是错误的


通过找到最长的边,然后将剩余的两条边相加,可以判断三条边是否构成三角形。如果它们大于最长的边,那么这些边可以形成一个三角形。

我建议如果您确定您的逻辑正确,请将方法更改为

def is_triangle?(a, b, c)
   a+b > c or b+c > a or c+a > b
end
但据我所知,这种方法不应该如此

def is_triangle?(a, b, c)
   a+b>c and b+c>a and c+a>b
end
关于ruby约定,需要注意以下几点:

  • 返回以“?”结尾的布尔值的方法
  • ruby方法返回最后计算的表达式,因此在这里编写返回是多余的

  • 我建议如果你确信你的逻辑是正确的,就把方法改为

    def is_triangle?(a, b, c)
       a+b > c or b+c > a or c+a > b
    end
    
    但据我所知,这种方法不应该如此

    def is_triangle?(a, b, c)
       a+b>c and b+c>a and c+a>b
    end
    
    关于ruby约定,需要注意以下几点:

  • 返回以“?”结尾的布尔值的方法
  • ruby方法返回最后计算的表达式,因此在这里编写返回是多余的

  • 您的问题是,除非所有3个数字都是0,否则您的
    if
    s中的一个将始终为真。你想要的是更像

    def is_triangle(a,b,c)
      a + b > c && a + c > b && b + c > a
    end
    is_triangle(3,6,8) #=> true
    is_triangle(3,6,80) #=> false
    

    您的问题是,除非所有3个数字都是0,否则您的
    if
    s中的一个将始终为真。你想要的是更像

    def is_triangle(a,b,c)
      a + b > c && a + c > b && b + c > a
    end
    is_triangle(3,6,8) #=> true
    is_triangle(3,6,80) #=> false
    

    这个逻辑应该适用于找到三角形

    def is_triangle?(a,b,c)
      sorted = [a,b,c].sort
      greatest_side = sorted.pop
      greatest_side < sorted.sum
    end
    
    def是_三角形?(a、b、c)
    排序=[a,b,c]。排序
    最大侧=sorted.pop
    最大边
    这个逻辑应该适用于找到三角形

    def is_triangle?(a,b,c)
      sorted = [a,b,c].sort
      greatest_side = sorted.pop
      greatest_side < sorted.sum
    end
    
    def是_三角形?(a、b、c)
    排序=[a,b,c]。排序
    最大侧=sorted.pop
    最大边
    另一种方法:

    def is_triangle?(a,b,c)
      [a,b,c].max < [a,b,c].sum/2.0
    end
    
    def是_三角形?(a、b、c)
    [a,b,c]。最大值<[a,b,c]。总和/2.0
    结束
    
    或者对于Rails之外的Ruby:

    def is_triangle?(a,b,c)
      [a,b,c].max < [a,b,c].inject(:+)/2.0
    end
    
    def是_三角形?(a、b、c)
    [a,b,c].最大值<[a,b,c].注入(+)/2.0
    结束
    
    另一种方法:

    def is_triangle?(a,b,c)
      [a,b,c].max < [a,b,c].sum/2.0
    end
    
    def是_三角形?(a、b、c)
    [a,b,c]。最大值<[a,b,c]。总和/2.0
    结束
    
    或者对于Rails之外的Ruby:

    def is_triangle?(a,b,c)
      [a,b,c].max < [a,b,c].inject(:+)/2.0
    end
    
    def是_三角形?(a、b、c)
    [a,b,c].最大值<[a,b,c].注入(+)/2.0
    结束
    
    这也是此问题的解决方案:

    if 2*[a,b,c].max < a + b + c
        true
    else
        false
    end
    
    if 2*[a,b,c].max
    理论上可能存在各种不同的不等式:


    这也是此问题的解决方案:

    if 2*[a,b,c].max < a + b + c
        true
    else
        false
    end
    
    if 2*[a,b,c].max
    理论上可能存在各种不同的不等式:


    当你期望错误时,你传递的是什么值?我觉得你的逻辑不正确,如果我错了,请原谅,这已经是小学时代了。但条件不应该是
    a+b>c和b+c>a和c+a>b
    ??你所做的转化为
    a+b>c或b+c>a或c+a>b
    当你期望值为false时,你传递的值是什么?你的逻辑对我来说似乎不正确,如果我错了,请原谅,我早就上小学了。但条件不应该是
    a+b>c和b+c>a和c+a>b
    ??你正在做的事情转化为
    a+b>c或b+c>a或c+a>b
    这是一个很好的方法+1应在最后一行对其进行排序。sum
    而不是排序。sum
    。这是一个很好的方法+1最后一行应该是
    sorted.sum
    而不是
    sort.sum
    。如果这是你想要的答案,你应该接受它(投票计数器下面的小勾号)。我真的不在乎你是否接受我的答案或其他人的答案,但如果你的问题已经得到回答,请接受一个。如果这是你想要的答案,你应该接受它(投票柜台下面的小记号)。我真的不在乎你是否接受我或其他人的答案,但如果你的问题已经得到了回答,请接受一个。