![]() |
#2
汤圆阿门2007-10-02 22:26
题目如下: Description
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.
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.
Sample Input
Sample Output
|
poj1207
我自己测的数据感觉都能通过,为什么会WA呢~~
#include <iostream>
using namespace std;
int solve(int num1, int num2)
{
int max = 0;
for( int i = num1; i <= num2; i++)
{
int j = i;
int print_num = 1;
while( j != 1)
{
if(j%2 != 0)
j = (3*j+1);
else
j /= 2;
print_num++;
}
if(print_num > max)
max = print_num;
}
return max;
}
int main(int argc, char*argv[])
{
int m,n;
while(cin >> m >> n && m && n)
{
int p = m,q = n;
if( p > q)
{
int temp;
temp = p;
p = q;
q = temp;
}
int max = solve(p,q);
cout << m << " " << n << " " << max << endl;
}
return 0;
}