-1

What's wrong with this Ruby code? I'm trying to solve the first Project Euler question.

I think the problem is in the syntax of sum += num, but I can't figure out what the proper syntax for this would be.

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
4

3 回答 3

4

这是一个替代方案:

(1...1000).select { |x| x % 3 == 0 || x % 5 == 0 }.reduce(:+)
于 2013-07-13T03:21:29.663 回答
3

你让这种方式比它需要的更复杂。此外,如果数字是 35 的倍数,则将其相加两次。尝试这样的事情:

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
于 2013-07-13T03:12:23.950 回答
0

这运行,你的语法是好的,但没有给出正确的答案,因为如前所述,你将 3 和 5 的倍数相加两次,一次在第一个循环中, with num,第二个循环, with num2

所以你有两个循环,但实际上你只需要一个。

您只需要考虑每个数字一次,您可以检查它是否是 3 或 5 的倍数。这将解决您的重复计算问题,也使您的代码更简洁。

此外,就像 Doorknob 显示的那样,each语法会在这些循环中为您节省一些行。您还可以使用以下for语法:

for num in (1..1000)
  <stuff here>
end

查看“循环:如何用几行代码完成数千个操作。 ”中的循环类型。

于 2013-07-13T03:26:06.977 回答