Ruby代码不起作用
问题描述:
这是一个Euler Project Number 1。Ruby代码不起作用
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
。你能告诉我,我做错了什么?
答
您需要一个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
'(1 ... 1000)。选择{| N | (N%3).zero? || (N%5).zero? } .inject(:+)' – 2014-10-20 01:03:26
@JörgWMittag:理论上,*可能*将所有项目欧拉问题作为单个表达式来执行。虽然可能会很棘手! – 2014-10-20 01:10:33
你也可以做'case 0;当num%3时,num%5; ...结束。 – sawa 2014-10-20 01:21:39