2013-10-06 85 views
0

我想检查是否有任何两个整数数组中的总和等于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

为什么你使用这个逻辑'我!= n - 我'?我很想知道。 –

+0

我对Python有一些想法,但知道Ruby中的语法。实际上,如果我不返回false,我会打印数组中的所有元素。无论如何,根据我的逻辑,第一次测试应该返回true,但由于某种原因并非如此。数组的一些两个元素可以等于n,那么方法应该返回true。我在检查,是否有一些n - i包含在数组中。我!= n - 我不正确,你说得对。 – user2742080

+0

你的方法名称很混乱,因为你没有得到方法中任何东西的总和。不过,你正在获得这些差异。 – vgoff

回答

0
s = n - i # => 8, 11 

s是不是你的想法是,那么。

你假,在第一种情况下,因为你相信8或11包括在你给从1元素5阵列这工作时,你给的东西,例如6个或3

3

你能做到这一点的不是那么多行:-)

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

这会工作,但效率低下。 – sawa

+0

+1这将处理像'[1,2,3,4,4]; n = 8“。 – steenslag

+1

@steenslag这是OP不一定清楚的地方,但从OP代码中的'i!= n - i'和问题中的'如果有任何两个整数'这个短语来看,我认为多次出现相同的数字不应该算作满足条件。 – sawa

0

它返回总是false,因为你就在第一个循环返回false。正确的是:

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

    false 
end 

如果循环没有找到匹配结束,则会显式返回false。

+0

我不明白这个语法......只是几天学习Ruby。你能不能写下来使用array.each do | number |?就我试图实现它的方式? – user2742080

+0

你可以写出更好的'array.any? {| num | array.include?(n - num)}'。 – Hauleth

+0

更改您希望的代码。看到你的代码的区别? – spickermann

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 

更新(按照@卢卡斯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?就不属于这种情况。

+0

为什么不'array.any? {| num | array.include?(n - num)}'? – Hauleth

+0

@ŁukaszNiemier感谢指点......我忘了那个选项.. –

0

我有更多的运气.combination.any?

return array.combination(2).any? {|a, b| a + b == n} 

如果有的话总结起来这将返回true,否则为false。不过,您将需要更多处理空数组。

相关问题