1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ruby] AtCoder 過去問 B - Collatz Problem

Posted at

##はじめに
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
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?