思路: 求的过程中应该将原先求过得数保留下来,应用map数组的方式保留下来。否则会出现超时或者用数组保留下来会出现runtime error。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
map<int,int>s;
int main(){
int n1,n2;
while(scanf("%d%d",&n1,&n2)!=EOF){
int g1=n1,g2=n2;
if(n1>=n2) swap(n1,n2);
//memset(f,0,sizeof(f));
int ans=0;
for(int i=n1;i<=n2;i++){
//if(i%2==0) continue;
int temp=i,flag=0;
while(1){
flag++;
if(temp==1) break;
if(temp%2) temp=temp*3+1;
else temp=temp/2;
if(s[temp]) {
flag+=s[temp];
break;
}
}
s[i]=flag;
if(ans<flag){
ans=flag;
}
}
printf("%d %d %d\n",g1,g2,ans);
}
}