这个题目写的真是心累,思路很简单,就不说了,题目中已经给出了。注意2点:
1.进行while循环时的值应该定义为 long long
2.考虑2个数字的大小。如果前一个数比较小应该调换,然后输出时应该和输入的顺序一样。
#include <iostream> #include<stdio.h> #include<stdlib.h> #include<string> #include<string.h> #include<set> #define maxn 1000000+10 using namespace std; int a[maxn]; int main() { int c=0,f,b; memset(a,0,sizeof(a)); a[1]=1; a[2]=2; for(int i=3;i<maxn;i++){ long long k=i; c=0; while(k>1){ if(k%2==0){ k/=2; c++; } else{ k=k*3+1; c++; } if(k<i){ c+=a[k]; break; } } a[i]=c; } while(scanf("%d%d",&f,&b)!=EOF){ int t=0; int x,y; if(f>b){ x=b; y=f; }else{ x=f; y=b; } for(int i=x;i<=y;i++){ if(a[i]>t) { t=a[i]; } } printf("%d %d %d ",f,b,t); } return 0; }