天天看點

poj-1207 THE 3n+1 problem

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

繼續閱讀