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\n",f,b,t);

    }

   return 0;
}

 

posted @ 2015-12-22 16:09  咸咸的告别  阅读(161)  评论(0)    收藏  举报