Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 51221 | Accepted: 16262 |
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 89 900 1000 174
1 #include<iostream> 2 #include<string.h> 3 #include<stdio.h> 4 #include<ctype.h> 5 #include<algorithm> 6 #include<stack> 7 #include<queue> 8 #include<set> 9 #include<math.h> 10 #include<vector> 11 #include<map> 12 #include<deque> 13 #include<list> 14 using namespace std; 15 16 int CycleNum(int i) 17 { 18 int count=1; 19 while(i!=1) 20 { 21 if(i%2) 22 i=3*i+1; 23 else 24 i/=2; 25 count++; 26 } 27 return count; 28 } 29 30 int main(void) 31 { 32 int a,b; 33 while(cin>>a>>b) 34 { 35 int x=a<b?a:b; 36 int y=a>b?a:b; 37 int MaxCycle=0; 38 for(int i=x;i<=y;i++) 39 { 40 int temp=CycleNum(i); 41 if(MaxCycle<temp) 42 MaxCycle=temp; 43 } 44 cout<<a<<' '<<b<<' '<<MaxCycle<<endl; 45 } 46 return 0; 47 }