2014-10-20 172 views
-4

這是一個Euler Project Number 1Ruby代碼不起作用

sum = 0 
array = [] 

for num in 1...1000 
    if num % 3 === 0 
     sum = sum + num 
     array.push(num) 
    end 
    if num % 5 === 0 
     sum = sum + num 
     array.push(num) 
    end 
end 

#puts array 
puts sum 

當我10的範圍內運行的程序,我得到了正確的輸入,但是當我使用1000,我的回答是266333,而正確答案根據答案作弊266138。你能告訴我,我做錯了什麼?

回答

2

您需要一個elsif而不是兩個if語句。目前你有一些可以被3和5整除的數字,這些數字被加到總數上兩次。

for num in 1...1000 
    if num % 3 === 0 
     sum = sum + num 
     array.push(num) 
    elsif num % 5 === 0 
     sum = sum + num 
     array.push(num) 
    end 
end 

或者更好的辦法:

for num in 1...1000 
    if num % 3 == 0 || num % 5 == 0 
     sum = sum + num 
     array.push(num) 
    end 
end 
+0

'(1 ... 1000)。選擇{| N | (N%3).zero? || (N%5).zero? } .inject(:+)' – 2014-10-20 01:03:26

+0

@JörgWMittag:理論上,*可能*將所有項目歐拉問題作爲單個表達式來執行。雖然可能會很棘手! – 2014-10-20 01:10:33

+0

你也可以做'case 0;當num%3時,num%5; ...結束。 – sawa 2014-10-20 01:21:39