http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=10102&courseid=0

  1. The 3n + 1 problem
    Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB
    Total submit users: 24, Accepted users: 21
    Problem 10102 : No special judgement
    Problem description
      考虑如下算法:
     
    		1. 		 Input n
    

    2. Printn

    3. if n = 1 then STOP

    4. if n is odd then n=3*n+1

    5. else n=n/2

    6. GOTO 2

     

    如果输入22,将得到下列输出序列 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

    这个算法可以对任意的正整数输入都能中止?到现在为止还只是一个猜想。当然计算机可以验证对于输入的整数n,如果 0 < n < 1,000,000 (实际上比这个数大很多的也已经得到验证)

    给定输入n, 可以知道算法终止前打印的数字的数目,这个叫做n的周期长度。上述例子中,22的周期长度是16。

    对于输入的两个数,ij,要求你求出 ij之间所有数的最大周期长度。

    Input
      输入是一些整数对ij,每行有一对数。0 < i,j ≤ 10,000 。

    要求你求出ij(包括i,j)之间所有数的最大周期长度。

    Output
      对于输入的每对ij,输出ij以及i,j(包括i,j)之间所有数的最大周期长度。这三个数在同一行且用一个空格隔开。 ij 必须和输入的顺序一致。

    Sample Input
    1 10
    100 200
    201 210
    900 1000
    
    
    Sample Output
    1 10 20
    100 200 125
    201 210 89
    900 1000 174
    #include using namespace std; int circle(int n) { int sum=1; while(n!=1) { sum++; if(n%2==1) n=3*n+1; else n/=2; } return sum; } int main() { int i,j,num,k; while(cin>>i>>j) { int m,n; m=i; n=j; if(m>n) swap(m,n); num=circle(i); for(k=m+1;k<=n;k++) if(circle(k)>num) num=circle(k); cout<

你可能感兴趣的:(http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=10102&courseid=0)