Description
Consider the following algorithm:
1. input n 2. print n 3. if n = 1 then STOP 4. if n is odd then n <-- 3n+1 5. else n <-- n/2 6. GOTO 2
Given the input 22, the following sequence of numbers will be printed 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
It is conjectured that the algorithm above will terminate (when a 1 is printed) for any integral input value. Despite the simplicity of the algorithm, it is unknown whether this conjecture is true. It has been verified, however, for all integers n such that 0 < n < 1,000,000 (and, in fact, for many more numbers than this.)
Given an input n, it is possible to determine the number of numbers printed before the 1 is printed. For a given n this is called the cycle-length of n. In the example above, the cycle length of 22 is 16.
For any two numbers i and j you are to determine the maximum cycle length over all numbers between i and j.
Input
You should process all pairs of integers and for each pair determine the maximum cycle length over all integers between and including i and j.
Output
Sample Input
1 10 100 200 201 210 900 1000
Sample Output
1 10 20 100 200 125 201 210 89900 1000 174
#include <iostream> using namespace std; int main() { int a,b,sum,t,max; while(cin>>a>>b) { cout<<a<<" "<<b<<" "; if(a>b) { t=a; a=b; b=t; } max=0; for(int i=a; i<=b; i++) { int n=i;//把i值赋给n,可以操作从a到b之间的所有数,也可以不赋值 sum=1; while(n-1)//当n=1时候终止 { if(n%2) n=3*n+1; else n/=2; sum++; } if(max<sum) max=sum; } cout<<max<<endl; } return 0; }