我试图检查数组中的任何两个整数是否等于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)
答案 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。但是,你需要更多来处理空数组。