查找低于10的3或5的倍数

时间:2016-01-14 15:43:08

标签: ruby

我试图找到所有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,因为它是3569的总和

3 个答案:

答案 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