在读懂题的情况下:
注意一下几点:
1.for(i=n; i<=m; i++)的时候 (进入这个循环的条件是n <= m)如果n m 分别是 10 1呢?
2. n less than 1,000,000 and greater than 0.
是不是可以用一个数组ans[1000000]存下下标为n的值,这样算过的值是不是就可以不用再次算了。
3.开的数组太大了就有可能超时滴。。。
代码:
#include <stdio.h>
#include <string.h>
int ans[10000005];
int main()
{
int m, n;
memset(ans, 0, sizeof(ans));
while(~scanf("%d%d", &n, &m))
{
printf("%d %d ", n, m);
int i;
if(n > m)
{
n = n + m;
m = n - m;
n = n - m;
}
int max = -9999999;
for(i=n; i<=m; i++)
{
if(ans[i] == 0)
{
int cnt = 0, tmp = i;
while(1)
{
cnt ++;
if(tmp % 2 == 0)
tmp /= 2;
else
tmp = 3*tmp + 1;
if(tmp == 1)
{
cnt++;
break;
}
}
ans[i] = cnt;
}
if(max < ans[i])
max = ans[i];
}
printf("%d\n", max);
}
return 0;
}