我试图找到所有3或5以下的倍数之和
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
result = 0
numbers.each do |number|
if number % 3 == 0 or number % 5 == 0
result += number
end
print result
end
我收到了这个:0033814141423
,但我希望23
,因为它是3
,5
,6
,9
的总和
答案 0 :(得分:4)
您的print
语句位于循环内。它应该移到外面。
numbers = [1,2,3,4,5,6,7,8,9]
result = 0
numbers.each do |number|
if number % 3 == 0 or number % 5 == 0
result += number
end
end
print result
正确的缩进也可以帮助您捕获这些错误。此外,您应该使用p
打印信息,而不是print
。
使用p
,每个输出都将在新行上完成。这可能是理解这个问题的暗示。
这也是使用Enumerable#inject
和累加器的可能替代方案。
numbers = [1,2,3,4,5,6,7,8,9]
numbers.inject(0) do |acc, number|
acc + case
when number % 3 == 0 then number
when number % 5 == 0 then number
else 0
end
end
更紧凑的形式
numbers = [1,2,3,4,5,6,7,8,9]
numbers.lazy.select { |n| n % 3 == 0 || n % 5 == 0 }.inject(:+)
答案 1 :(得分:2)
您可以使用Array#select
方法。
result = 0
[1,2,3,4,5,6,7,8,9].select{|i| i % 3 == 0 || i % 5 == 0}.each do |num|
result += num
end
或更快与inject
。
[1,2,3,4,5,6,7,8,9].select{|i| i % 3 == 0 || i % 5 == 0}.inject(:+)
答案 2 :(得分:0)
好吧,我所做的就是这样:
(1...10).to_a.select{|i| i%3==0 or i%5==0}.sum