zoukankan      html  css  js  c++  java
  • HDU 1032 The 3n + 1 problem

    解题报告:3n+1问题应该都知道,这里要求的是在一个区间i到j里面长度最大的那个数是的长度是多少?首先要说的 是这题不能打表,打表只能打到100000左右就不行了,然后我们可以先确定一下最大的长度大概有多少,大概就是300多的样子,还好,只有3位数,可以直接暴力都不会超时,这就简单了,一开始总是觉得应该要打表,要不然就会超时,但是 确定最大只有300多就好了。不过这题还要注意的是输入的范围 i 可能会大于 j ,这个好坑,然后输出还得按照原来的顺序输出。

     1 #include<cstdio>
     2 #include<iostream>
     3 int main() {
     4     int m,n;
     5     while(scanf("%d%d",&m,&n)!=EOF) {
     6         int ans = 0;
     7         printf("%d %d ",m,n);
     8         if(m > n)   //真的有i > j 的情况,去掉这句就WA 
     9         std::swap(m,n);
    10         for(int i = m;i<=n;++i) {
    11             int d = 1,k = i;
    12             while(k != 1) {
    13                 d++;
    14                 if(k & 1)
    15                 k = 3*k+1;
    16                 else k/=2;
    17             }
    18             if(d > ans)
    19             ans = d;
    20         }
    21         printf("%d
    ",ans);
    22     }
    23     return 0;
    24 }
    View Code
  • 相关阅读:
    小数化分数2
    Sum of divisors
    Subsequence
    Lowest Bit
    Specialized Four-Digit Numbers
    Hunters
    Pet
    测试你是否和LTC水平一样高
    Bank Interest
    bzoj 1295
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3235952.html
Copyright © 2011-2022 走看看