为什么我在两种情况下都会弄错?

时间:2013-10-06 20:02:47

标签: ruby

我试图检查数组中的任何两个整数是否等于n。但是,对于第一种情况我是假的,尽管我认为我应该成真。

def sum_to_n?(array, n)
  for i in array
    s = n - i
    return true if array.include? s
    return false if i != n - i
  end
end

puts sum_to_n?([1,2,3,4,5], 9)
puts sum_to_n?([1,2,3,4,5], 12)

5 个答案:

答案 0 :(得分:3)

你可以在很多行中做到这一点: - )

ary = [1,2,3,4,5]
n=9
ary.combination(2).detect { |a, b| a + b == n }

答案 1 :(得分:0)

s = n - i # => 8, 11

s不是你认为的那样。

在第一种情况下,你会得到错误,因为你认为你给出的数组中包含1或5的数组中包含8或11。当你给出6或3之类的东西时,这是有效的

答案 2 :(得分:0)

它始终返回false,因为您在第一个循环中返回false。正确的是:

def sum_to_n?(array, n)
  for number in array
    return true if array.include?(n - number)
  end

  false
end
如果循环结束而没有找到匹配项,则显式返回

false。

答案 3 :(得分:0)

这是怎么回事?

def sum_to_n?(array, n)
  for i in array
    s = n - i
    return true if array.include?(s)
  end
  false # This will be retuned only when no two numbers are found,whose sum is n
end

puts sum_to_n?([1,2,3,4,5], 9)
puts sum_to_n?([1,2,3,4,5], 12)
# >> true
# >> false

简单代码正在使用Enumerable#find

def sum_to_n?(array, n)
  !!array.find{|e| array.include?(n-e)}
end

puts sum_to_n?([1,2,3,4,5], 9)
puts sum_to_n?([1,2,3,4,5], 12)
# >> true
# >> false

更新(根据@ŁukaszNiemier)

def sum_to_n?(array, n)
  array.any? { |num| array.include?(n - num) }
end

puts sum_to_n?([1,2,3,4,5], 9)
puts sum_to_n?([1,2,3,4,5], 12)
# >> true
# >> false

但是我会选择Enumerable#find,因为它会在找到项目后停止迭代,而Enumerable#any?不是这样。

答案 4 :(得分:0)

我对.combination.any?

感到非常幸运
return array.combination(2).any? {|a, b| a + b == n}

如果有任何结果,则返回true,否则返回false。但是,你需要更多来处理空数组。