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が5で、iすでに4であり、ループの条件がfalseである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 に答える