这个Ruby代码出了什么问题?我正在尝试解决the first Project Euler question。
我认为问题出在sum += num
的语法中,但我无法弄清楚它的正确语法是什么。
sum = 0
num = 0
num2 = 0
loop do
num += 1
if num % 3 == 0
sum += num
break if num > 1000
end
end
loop do
num2 += 1
if num2 % 5 == 0
sum += num2
break if num2 > 1000
end
end
puts sum
答案 0 :(得分:4)
这是另一种选择:
(1...1000).select { |x| x % 3 == 0 || x % 5 == 0 }.reduce(:+)
答案 1 :(得分:3)
你使这个方式比它需要的更复杂。此外,如果数字是3 和 5的倍数,则会添加两次。尝试这样的事情:
sum = 0 # initialize the sum
(1...1000).each { |x| # loop from 1 to 1000
sum += x if x % 3 == 0 || x % 5 == 0 # add the number to the sum if it is
# divisible by 3 or 5
}
puts sum # output the sum
答案 2 :(得分:0)
这样运行,你的语法没问题,但没有给出正确的答案,因为如上所述,你在第一个循环中添加两次3和5的倍数,一次加num
,第二个循环,num2
。
所以你有两个循环,但实际上只需要一个。
您只需要考虑一次,您可以检查它是否是3或5的倍数。这将解决您的重复计算问题,并使您的代码更简洁。
此外,就像Doorknob所显示的那样,each
语法可以在这些循环上省去一些行。您还可以使用for
语法:
for num in (1..1000)
<stuff here>
end
查看“Loops: How to do thousands of operations with a few lines of code.”中的循环种类。