小心中间值越界!
#include <cstdio>
#include <string.h>
using namespace std;
int dp[1000001];
int getMCL(int n)
{
int newN=0;
if(n%2==0) newN=n>>1;
else newN=n*3+1;
if(n>1000000) return 1+getMCL(newN);
else if(dp[n]==0)
{
dp[n]=1+getMCL(newN);
}
return dp[n];
}
void solve(int a,int b)
{
int m=a>b?b:a;
int n=a>b?a:b;
int mcl=0;
int outV=0;
for(int i=m;i<=n;i++)
{
mcl=getMCL(i);
if(outV<mcl)outV=mcl;
}
printf("%d %d %d\n",a,b,outV);
}
int main()
{
int a,b;
memset(dp,0,sizeof(dp));
dp[1]=1;
while(scanf("%d%d",&a,&b)!=EOF)
{
solve(a,b);
}
return 0;
}