AOJ0158 Collatz's Problem

問題リンク Collatz's Problem

  • 解法

整数nが計算により1にたどり着くまでの回数は当然変わらないのでメモ化をしました。

  • ソース
import java.util.Arrays;
import java.util.Scanner;

//Collatz's Problem
public class AOJ0158 {

	static int[] dp;

	static int f(int n){
		if(dp[n]!=-1)return dp[n];
		if(n%2==0)return dp[n] = f(n/2)+1;
		else return dp[n] = f(n*3+1)+1;
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		dp = new int[1000001];
		Arrays.fill(dp, -1);
		dp[1] = 0;
		while(true){
			int x = sc.nextInt();
			if(x==0)break;
			System.out.println(f(x));
		}
	}
}