Sample Input
1 10
100200
201 210
900 1000
Sample Output
1 10 20
100 200 125
201 210 89
900 1000 174
水题,不过得到的经验是:
给i、j,需要对i、j之间的数进行操作,不要定式思维的认为i就一定小于j,题目没说就不一定。
另外,数据量那么大,我做的时候用了递推一点技巧,mmp,竟然暴力也能过,不科学。
#include <iostream> using namespace std; int root(int n) { int num=1; while(n!=1) { if(n%2) n=3*n+1; else n/=2; num++; } return num; } int main() { int n,m; int max; while(cin>>n>>m) { int n1=n; int m1=m; max=0; if(n>m) { int t=n;n=m;m=t; } for(int i=n;i<=m;i++) { if(2*i<=m||((i-1)%3==0&&((i-1)/3)%2&&((i-1)/3)>=n)) continue; //省时技巧所在 else { int t=root(i); if(t>max) max=t; } } cout<<n1<<' '<<m1<<' '<<max<<endl; } }