HDOJ 1032 The 3n + 1 problem

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;
        }
}
原文地址:https://www.cnblogs.com/biggan/p/7417912.html