0

这里是 StackOverflow 的新手。我正在处理第一个欧拉问题,并遇到了一个问题,我可以让语句遍历数组。似乎这与我设置 while 循环的方式有关,但我无法弄清楚。

这是我的代码:

#euler problem 1

numbers = [3,5]
sum = 0
i=1
total=0

numbers.each do |number|
  while i * number < 10
    adder = i * number
    total += adder
    i += 1
    puts total
  end
end

puts total

输出为 3 9 18 18

知道为什么它不处理数组编号中的 5 吗?

4

1 回答 1

4

您的问题是i在块外声明,所以当number是五时,i已经是四,并且while循环的条件立即失败,因为20 < 10它是假的。试试这样:

numbers = [3,5]
sum = 0
total=0

numbers.each do |number|
  i = 1
  while i * number < 10
    #...
  end
end

puts total

如果你在你的代码中放一点puts,你会看到发生了什么:

i = 1
numbers.each do |number|
  puts "#{number}\ti = #{i}"
  while i * number < 10
    puts "\ti = #{i}"
    adder = i * number
    total += adder
    i += 1
  end
end

这将为您提供以下输出:

3   i = 1
    i = 1
    i = 2
    i = 3
5   i = 4

你会看到问题i

于 2012-05-09T06:00:03.900 回答