2014-10-20 107 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