Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 44359 | Accepted: 13942 |
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
这是一道简单题,注意i和j的大小和前后,我由于在前面修改了i和j的位置,但后面输出的时候没有调换位置,WA了
///
AC代码:
/***********************
* 程序名:The 3n + 1 problem.cpp
* 功能:ACM
************************/
#include <iostream>
using namespace std;
int main()
{
int i, j, max, count, m, n;
int i_1, j_1;
while(cin>>i>>j) {
i_1 = i;
j_1 = j;
max = 0;
if(i > j) {
m = i;
i = j;
j = m;
}
for(n = i; n <= j; n++) {
count = 1;
m = n;
if(m == 1) {
count = 1;
}
while(m != 1) {
if(m % 2 == 0) {
m = m / 2;
}
else {
m = m * 3 + 1;
}
count++;
}
if(max < count) {
max = count;
}
}
cout<<i_1<<" "<<j_1<<" "<<max<<endl;
}
return 0;
}