这是怎么回事?
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
更新(按照@卢卡斯Niemier)
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?
就不属于这种情况。
为什么你使用这个逻辑'我!= n - 我'?我很想知道。 –
我对Python有一些想法,但知道Ruby中的语法。实际上,如果我不返回false,我会打印数组中的所有元素。无论如何,根据我的逻辑,第一次测试应该返回true,但由于某种原因并非如此。数组的一些两个元素可以等于n,那么方法应该返回true。我在检查,是否有一些n - i包含在数组中。我!= n - 我不正确,你说得对。 – user2742080
你的方法名称很混乱,因为你没有得到方法中任何东西的总和。不过,你正在获得这些差异。 – vgoff