• hdu_1032 poj_1207_The 3n+1's problem


     1 #include<iostream>
     2 using namespace std;
     3 
     4 int a[1000001];
     5 
     6 
     7 int main()
     8 {
     9     int n,m,max;
    10     __int64 i,k;
    11     int cnt ;
    12 
    13     for(k = 1; k <= 100000; k++)
    14         {
    15             cnt = 0;
    16             i = k;
    17             while(true)
    18             {
    19                 cnt++;
    20                 if(i==1)
    21                     break;
    22                 if(i%2 == 0)
    23                     i = i/2;
    24                 else
    25                     i = 3*i +1;
    26             }
    27             a[k] = cnt; 
    28         }
    29 
    30     while(scanf("%d%d",&n,&m)!= EOF)
    31     {
    32         int tmp;
    33         max = 0;
    34         cout<<n<<' '<<m<<' ';
    35         if(m < n)
    36         {
    37             tmp = n;
    38             n = m;
    39             m = tmp;
    40         }
    41             
    42         for(i = n; i <= m; i++)
    43         {
    44             if(a[i]>max)
    45                 max = a[i];
    46         }
    47         
    48         
    49         cout<<max<<endl;
    50     }
    51     return 0;
    52 }

    时间有点慢,递归调用的话,可以零ms 下面是别人代码,甚好,所以贴来作比较。尚需努力啊————————

     1 #include <stdio.h>
     2 #define SIZE 10020  //SIZE开到10010都WA,10020就AC……
     3 int cycle[SIZE] = {0};
     4 int get_cycle(int n){
     5     if(n >= SIZE) return (n%2 == 1) ? get_cycle((3*n+1)/2)+2 : get_cycle(n/2)+1;  //n超出SIZE范围时直接递归,避免越界
     6     else if(cycle[n] == 0) cycle[n] = (n%2 == 1) ? get_cycle((3*n+1)/2)+2 : get_cycle(n/2)+1;
     7     return cycle[n];
     8 }
     9 int main(){
    10     int i, j, ii, jj;  
    11     cycle[1] = 1;
    12     for(int k = 2; k < SIZE; k++)
    13         get_cycle(k);
    14     while(EOF != scanf("%d%d", &ii, &jj)){
    15         i = (ii < jj) ? ii : jj;
    16         j = ii+jj-i;
    17         int max = cycle[i];
    18         for(int k = i+1; k <= j; k++)
    19             max = (cycle[k] > max) ? cycle[k] : max;
    20         printf("%d %d %d\n", ii, jj, max);
    21     }
    22     return 0;
    23 }
  • 相关阅读:
    [Leetcode]@python 76. Minimum Window Substring
    [Leetcode]@python 75. Sort Colors
    HTNL表单
    第二天
    开学心德
    HTML表单
    网页制作
    2nd day
    开课心得
    CF10D/POJ2127 LCIS 题解
  • 原文地址:https://www.cnblogs.com/konkon/p/2455146.html
Copyright © 2020-2023  润新知