考虑一个算法来生成以下序列的。从整数n开始。如果n为偶,除以2。如果是奇,乘3加1。对后面的n重复这个步骤,n = 1时终止。例如,n=22时,会产生下列顺序编号。
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
据猜想(但尚未证实),对任意整数n,该算法将终止在n = 1处。还有,此猜想对于1, 000, 000内的整数都成立。
对于一个输入n,n的周期长度是指产生包括(1)在内的数字个数。在上面的例子中, 22的周期长度为16。给定任何两个数字i和j, 需要你确定出对于i和j之间数字的最大周期长度,包括i和j两端点。
输入:
输入将是一系列的整数对i和j, 每行一个整数对。所有的整数将小于10000,且>0。
输出:
为每一对输入整数对i和j,输出的i和j应是同样的顺序,最后是的最大周期长度。这三个数字由一个空格隔开,每三个数字一行,对应一种输入和输出。
Sample Input
1 10
100 200
201 210
900 1000
Sample Output
1 10 20
100 200 125
201 210 89
900 1000 174
我是这么写的:
#include<iostream>
using namespace std;
int main()
{
int i,j,t,n,p,l;
while(cin>>i>>j)
l=1; //周期最小是1
{
if(i>j){t=i;i=j;j=t;}
for(i>0;i<=j;i++)
{
n=i;
p=1; //P用来计算周期长度
while(n!=1)
{
if(n%2==0)
n=n/2;
else
n=3*n+1;
p++;
}
if(l<p)
l=p;
}
}
cout<<i<<" "<<j<<" "<<l;
return 0;
}
在POJ提交后却是WrongAnswer
我少考虑什么情况了?
[ 本帖最后由 childrush 于 2010-8-7 14:49 编辑 ]