2013-10-06 86 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。不過,您將需要更多處理空數組。

相關問題