zoukankan      html  css  js  c++  java
  • UVA 3*n+1

    这个题目写的真是心累,思路很简单,就不说了,题目中已经给出了。注意2点:

    1.进行while循环时的值应该定义为 long long 

    2.考虑2个数字的大小。如果前一个数比较小应该调换,然后输出时应该和输入的顺序一样。

    #include <iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string>
    #include<string.h>
    #include<set>
    #define maxn 1000000+10
    using namespace std;
    int  a[maxn];
    int main()
    {
        int c=0,f,b;
        memset(a,0,sizeof(a));
        a[1]=1;
        a[2]=2;
        for(int i=3;i<maxn;i++){
              long long  k=i;
               c=0;
            while(k>1){
    
                if(k%2==0){
                    k/=2;
                    c++;
                }
               else{
                k=k*3+1;
                  c++;
               }
    
               if(k<i){
                 c+=a[k];
                 break;
               }
            }
    
        a[i]=c;
        }
        while(scanf("%d%d",&f,&b)!=EOF){
                int t=0;
                int x,y;
                if(f>b){
                    x=b;
                    y=f;
                }else{
                    x=f;
                    y=b;
                }
        for(int i=x;i<=y;i++){
            if(a[i]>t) {
                t=a[i];
            }
         }
          printf("%d %d %d
    ",f,b,t);
    
        }
    
       return 0;
    }
  • 相关阅读:
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言II博客作业03
    C语言II博客作业02
    C语言II博客作业01
    C语言I学期总结
  • 原文地址:https://www.cnblogs.com/wintersong/p/5067014.html
Copyright © 2011-2022 走看看