<戳我进原题地址>
特别需要注意的一个地方是:在输出两个原始数据后,要比较两个数据的大小,小的在前,大的在后(我尝试过首先比较两个数的大小再输出,结果是WRONG ANSWER,但是先输出再比较就是正确的了)
#include<stdio.h>
int cycle(int x)
{
int count = 1;
while(x!=1)
{
if(x%2==0)
{
x = x/2;
count++;
}
else
{
x = x*3+1;
count++;
}
}
return count;
}
int main()
{
int a,b,n,max,i;
while(scanf("%d%d", &a, &b)!=EOF)
{
printf("%d %d ",a,b);
if(a>b)
{
n = a; a = b; b = n;
}
max = 0;
for(i = a; i <= b; i++)
if(cycle(i) > max) max = cycle(i);
printf("%d\n",max);
}
return 0;
}
我在解题的时候遇到了两个错误,一个是上面说的比较大小和输出的顺序问题,另一个是cycle函数中,判断x是否为奇数,我写成了:
if(!x%2)
这就是一个典型初学者比较爱犯的错误(哭唧唧。。我已经好久没碰编程了,已经退回到原点了):逻辑非运算符优先于求余运算符,如果要使用记得配合上圆括号qaq,如:
if(!(x%2))