【JAVA】UVA 100 - The 3n+1 problem

題目原文:https://onlinejudge.org/index.php?Itemid=8&option=com_onlinejudge&page=show_problem&problem=36

Sample Input
1 10
100 200
201 210
900 1000

Sample Output
1 10 20
100 200 125
201 210 89
900 1000 174

題目大意:給定一個範圍(a~b),範圍內所有整數都跑一遍3n+1問題,並計算每個數需要多少次迴圈才能得到1,最後輸出範圍內需跑迴圈數最多的值。

3n+1跑法:如果n是奇數則n = 3n+1,否則n = n/2

注意:假設input為22,跑法則為:22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1,因此22的迴圈次數為16次(22本身也算1次)。

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

            while(sc.hasNextInt()){
            
            int a=sc.nextInt(),b=sc.nextInt();
            
            if(a>b){ //因為給定的兩數範圍並不一定是小到大,若a>b需要做調換動作
            int c = a;
            a = b;
            b = c;
            }

            int aa=a,bb=b,max=0; //將調換後的a,b存入aa,bb , max為最大迴圈數

            for(int i = a;i<=b ; i++){
            	int n = i;
            	int l = 1;
            	while(true){
            	
            	if(n==1)break;
            	l++;

            	if(n%2==0){
            	n = n/2;
            	}else{
            	n = n*3+1;
            	}
            	
            	if(l>max){
            	max = l;
            	}
            	
            	}
            }
            System.out.println(aa+" "+bb+" "+max);
            }
       
    }
    }