Ruby -If-Else声明(三角测试)

时间:2011-07-19 18:06:41

标签: 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

事情是:我假设的假回报继续回归真实。请帮忙!

7 个答案:

答案 0 :(得分:4)

此逻辑适用于查找三角形

def is_triangle?(a,b,c)
  sorted = [a,b,c].sort
  greatest_side = sorted.pop
  greatest_side < sorted.sum
end

答案 1 :(得分:3)

又一种方法:

def is_triangle?(a,b,c)
  [a,b,c].max < [a,b,c].sum/2.0
end

或者Rails以外的Ruby:

def is_triangle?(a,b,c)
  [a,b,c].max < [a,b,c].inject(:+)/2.0
end

答案 2 :(得分:2)

你的问题是,除非所有3个数字都是0,否则你的if之一将永远为真。你想要的更像是什么

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 :(得分:1)

你传入的任何内容都不会返回false。你的方法错了。

您可以通过找到最长边然后添加剩余的两边来判断三边是否形成三角形。如果它们大于最长边,那么双方可以制作一个traingle。

答案 4 :(得分:0)

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

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

有关红宝石惯例的一些注意事项:

  1. 返回布尔值的方法以'?'结尾
  2. ruby​​方法返回最后一个已计算的表达式,因此在此处写入return是多余的。

答案 5 :(得分:0)

puts " enter a, b and c values"

a=gets.to_i
b=gets.to_i
c=gets.to_i

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

you can also use this code too.. this is much easy

答案 6 :(得分:0)

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

if 2*[a,b,c].max < a + b + c
    true
else
    false
end

理论上可能存在各种不同的不等式:

http://en.wikipedia.org/wiki/Triangle_inequality