zoukankan      html  css  js  c++  java
  • 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;
            }
    }
  • 相关阅读:
    Android开发环境配置
    Spring API后端原理及最佳实践
    Hibernate 编程
    MySQL 远程访问
    MySQL 5.7 8.0 重置密码
    H5 流媒体
    你不知道的项目
    Promise
    Why Vuex
    Vue 技术细节
  • 原文地址:https://www.cnblogs.com/biggan/p/7417912.html
Copyright © 2011-2022 走看看