【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);
}
}
}