文系プログラマーのプログラミング備忘録

Java、競プロ、数学などについて書いてます

Collatz Problem [AtCoder Beginner Contest 116 B]

atcoder.jp


問題文がわかりづらいので整理します。


①初項sが与えられる
②第n項を、第n-1項(Aとする)が偶数ならばA/2、奇数ならば3*A+1として求めていく
③このようにして項を順に求めていったとき、最初に要素の重複が起こるのは第何項か


というふうに単純化します。

//ABC116-B

import java.util.*;

class Main {
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {

		int s = sc.nextInt();
		HashSet<Integer> set = new HashSet<>();
		set.add(s);

		for (int i=2; i<1000001; i++) {
			if (s%2 == 0) {
				s /= 2;
			}
			else {
				s = 3*s + 1;
			}

			if (set.add(s) == false) {
				System.out.println(i);
				return;
			}
			set.add(s);
		}
		
	}
}