LoginSignup
2
1

More than 3 years have passed since last update.

[Ruby編]等差数列

Posted at

[Ruby編]等差数列を解いてみる

問題

以下のような数列を出力するプログラムを作りましょう。

5 8 11 14 17 20 23 26 29 32

最初の数字が5で、3ずつ増加していく事がわかります。
一般的にこれを初項5、公差3の等差数列といいます。

このような数列を出力するプログラムを作りましょう。
初項 m が与えられ、公差 n が与えられるので 10番目までの数字をスペース区切りで出力するプログラムを作成してください。

入力される値

入力は以下のような初項 m、公差 nが半角スペース区切りのフォーマットで与えられます。

入力値最終行の末尾に改行が1つ入ります。

m n

期待する出力

初項 m ,公差 n の等差数列を1〜10番目までスペース区切りで出力して下さい。

入力例1

3 3

出力例1

3 6 9 12 15 18 21 24 27 30

入力例2

5 10

出力例2

5 15 25 35 45 55 65 75 85 95

入力例3

1 3

出力例3

1 4 7 10 13 16 19 22 25 28

私の答え

num = gets.chomp.split(" ").map(&:to_i)
x = num[0]
i = 1
array = []
while i <= 10
  array << x
  x = x + num[1]
  i += 1
end
print array.join(" ")

今回のポイント

1行目の入力値はスペース区切りがあるので split と map で[3, 3]のような配列にする

2行目で先ほどの配列の一部を指定して x変数に代入しておく

3行目で i = 1 としておく事で1回ずつカウントさせる

4行目でスコープ外でもarrayを使えるようにし、また繰り返し結果を配列に格納する

5~9行目で i が10回を超えるまで繰り返される。 array[] に x = num[0]を配列演算子 << を使って連結している。while文の場合、 i += 1 の自己代入演算子を忘れてはいけない

最終行でjoinメソッドを用いて (" ") とする事で配列間にスペースを開けられる

以上!

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1