现在的位置: 首页 > 综合 > 正文

CODE[VS]_3038 3n+1问题

2018年04月28日 ⁄ 综合 ⁄ 共 722字 ⁄ 字号 评论关闭

3n+1问题是一个简单有趣而又没有解决的数学问题。这个问题是由L. Collatz在1937年提出的。克拉兹问题(Collatz problem)也被叫做hailstone问题、3n+1问题、Hasse算法问题、Kakutani算法问题、Thwaites猜想或者Ulam问题。
问题如下:
(1)输入一个正整数n;
(2)如果n=1则结束;
(3)如果n是奇数,则n变为3n+1,否则n变为n/2;
(4)转入第(2)步。
克拉兹问题的特殊之处在于:尽管很容易将这个问题讲清楚,但直到今天仍不能保证这个问题的算法对所有可能的输入都有效——即至今没有人证明对所有的正整数该过程都终止。
【分析】:3n+1问题是一道经典的问题了,原名好像就什么“冰雹下落”,具体的问度娘吧~
                  注意不停的递归就好,其实没你想的那么难,还是一点要注意的,一定要注意递
                  归结束的条件,不然又会陷入死递归。。。
                  巧妙的利用一个deep变量来随时记录经过递归的次数,每经过一次递归,将会++
# include<cstdio>
# include<iostream>

using namespace std;

int ans = 0;
int f( int n,int deep )
{
    if ( n == 1 )
        return deep;
    if ( n%2 == 0 )
        return ( f(n/2,deep+1) );
    else
        return ( f( 3*n+1,deep+1) );

}

int main(void)
{
    int t;cin>>t;
    for ( int i = 1;i <= t;i++ )
    {
        int x;cin>>x;
        cout<<f(x,0)<<endl;
    }



    return 0;
}

抱歉!评论已关闭.