備忘録として自分の思考の軌跡を残しておきます。
今回の問題はこちらです。
考え方
1.奇数を数式で表す
まず考えることは「奇数をどのように表すか」ということです。奇数は数値nを2で割った時の余りが1になればよいので、これを数式で表します。
num % 2 == 1
Rubyでは「%」を使って余りを算出します。
2.奇数・偶数の判定方法を考える
今回求められている出力結果は「奇数のみを出力すること」だったので、この式を元に、ifを用いた場合分けを考えていきます。
上記の式の結果がtrueになったときに出力するようにしたいので、以下のような式を作成します。
if num % 2 == 1
puts num
end
3.標準入力でのデータ受け取り
それでは入力されたデータを受け取り、実際に組み立てていきます。
今回は以下のような数値を例とします。1行目に整数の個数Nが、2行目に数値が入力されています。
5
24 38 55 65 79
まず、getsを用いてデータを受け取ります。
a = gets.to_i
これで受け取ったデータがaに代入されました。与えられたデータを数値で受け取る時はgetsの後に「.to_i」を付けます。
次に2行目に与えられた整数を配列で受け取ります。
ary = gets.split.map(&:to_i)
これで2行目のデータが配列としてaryに代入されました。
このコードでは、まずgets.splitで入力文字列を配列に分割し、その配列をさらに**.map(&:to_i)**で整数型に変換しています(じゃいごテック様の記事を参考にしています)。
4.ループ処理の組み立て
ここからは、数値データが代入されているaryを用いて、奇数偶数の判定をしていきます。
全ての数値の判定をするためには繰り返しの処理が必要ですので、for…inを用いてループ処理のコードを組み立てていきます。
for num in ary
end
このような形でループ処理を記述します。aryのデータを取り出してnumに代入し、記述された処理をaryのデータを全て取り出すまで行うというイメージです。
5.完成
この中に冒頭で作成したifを用いたコードを追記します。
for num in ary
if num % 2 == 1
puts num
end
end
これでaryに入力された数値の奇数・偶数を判別し、奇数だったら出力されるようになりました。
参考までに、すべて記述したものを以下に記しておきます。
a = gets.to_i #整数の個数Nの出力
ary = gets.split.map(&:to_i) #配列で受け取り、数値に変換
for num in ary #配列の数値の奇数・偶数判定
if num % 2 == 1
puts num
end
end
もっと良い書き方があると思います。もしありましたらコメントなどでご教授ください。間違いもありましたらあわせてご指摘ください。整数の個数を受け取るやり方などあると思います。
不明点や理解できていなかった点
- for構文
- .mapを使ったデータ受け取り
参考資料