##はじめに
AtCoder過去問B問題をRubyで解いてみました。
他の方々の解き方を見ていると自分の解き方をしている人は見かけなかったので考え方少し変なのかなと思いながら、ACいただいているからいっかと思ったりしています。
それではよろしくお願いします。
問題はこちらから確認してください。↓
##B - Collatz Problem
まずは入力を受け取ります、今回はシンプルですね。
integerで受け取ります。
s = gets.to_i
aを配列で管理します。
入力値が初期値となるので配列aに入れておきます。
s = gets.to_i
a = [s]
問題文に従って条件分岐をして、配列aに追加するif文を作ります。
s = gets.to_i
a = [s]
if s % 2 == 0
s = s/2
a << s
else
s = 3*s +1
a << s
end
このifの処理を繰り返すのですが、uniqメソッドを使って条件式を作成します。
配列aの要素が重複したらuniqメソッドで重複している要素を取り除きます。
uniqメソッドを使用した配列aと何もメソッドを使っていない配列aが同じ間はifの処理を繰り返すようにします。
要素が重複したらこの条件から外れるので処理が終わります。
s = gets.to_i
a = [s]
while a.uniq == a
if s % 2 == 0
s = s/2
a << s
else
s = 3*s +1
a << s
end
end
処理が終わった時点の配列aの要素の数=答えですのでlengthメソッドで出力して完成です。
s = gets.to_i
a = [s]
while a.uniq == a
if s % 2 == 0
s = s/2
a << s
else
s = 3*s +1
a << s
end
end
puts a.length