这道题要注意的一个问题是:当输入的第一个数大于第二个数时,在计算时,应该把两个数置换一下。输出时,无论两个数的大小关系如何,保持和输入时一样。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a,b,Max;
void Swap(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int Length(int x)
{
int Length_x = 1;
while(x != 1)
{
++Length_x;
if(x % 2 == 1)
x = x * 3 + 1;
else
x /= 2;
}
return Length_x;
}
int main()
{
while(scanf("%d%d",&a,&b) != EOF)
{
printf("%d %d ",a,b);
Max = 0;
if(a > b)
Swap(&a,&b);
for(int i = a; i <= b; i++)
Max = max(Max,Length(i));
printf("%d\n",Max);
}
return 0;
}