Description
Problems in Computer Science are often classified as belonging to a certain class of problems (e.g., NP, Unsolvable, Recursive). In this problem you will be analyzing a property of an algorithm whose classification is not known for all possible inputs.
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.
(是i和j之间数的循环次数最大的)
#include<iostream> using namespace std; int bb(int i) { int count=1; while(i!=1) { if(i%2==0)i/=2; else i=i*3+1; count ++; } return count; } int main() { int a,b; int q=0; while(cin>>a>>b) { q++; if(q>=10000)break; int d=a>b?a:b; int c=a<b?a:b; int maxa=0; for(int j=c;j<=d;j++) { int a1=bb(j); if(maxa<a1)maxa=a1; } cout<<a<<" "<<b<<" "<<maxa<<endl; } return 0; }