HDOJ 1032 The 3n + 1 problem

来源:互联网 发布:facebook关闭人工智能 编辑:程序博客网 时间:2024/05/21 09:58

算法叙述:递归(也可以不用)


注意事项:

1.无聊输入,输入的两个数大小关系不确定

本题输入的两个数大小关系不确定,但是不能交换两个数,因为最后要原样输出

2.过大的数组

过大的数组应该定义为全局变量

3.数组避免重复运算

对不每组不同的输入,会有些数据可以重复利用的,比如对于输入1 10和5 15来说,重复部分是5和10之间的数据。
也就是说,我们在处理每组数据时,不必要对每组的数据逐一处理,聪明的做法就是预先整一个大的数组,把我们所需要的所有的数据存下来,用的话直接去取就可以了。这样可以避免大量重复的计算。

我的代码:

#include<iostream>#include<algorithm>using namespace std;int a[1000000]={0};int main(){    int x,y,beg,end;    int i,j,counter=0,_max=0;    while(cin>>x>>y)    {        if(x>y)        {            beg=y;            end=x;        }        else        {            beg=x;            end=y;        }        for(i=beg;i<=end;i++)        {            if(!a[i])            {                for(j=i;j!=1;)                {                    if(j%2)                        j=3*j+1;                    else                        j/=2;                    counter++;                }                a[i]=counter+1;                counter=0;            }            _max=max(_max,a[i]);        }        cout<<x<<' '<<y<<' '<<_max<<endl;        _max=0;    }    return 0;}


0 0
原创粉丝点击