3n+1问题

/*首先,定义这样一个函数f(n),当n为偶数时,f(n)=n/2;当n为奇数时f(n)=(3*n+1)/2。
角谷猜想是说:对于任意给定的整数n,计算f(n),f(f(n)),f(f(f(n))),……,若干步后总会得到1.
我们现在问题是:给定一个n,求出数字序列中第一次出现1的步数。
*/
#include<iostream>
using namespace std;
int main()
{
    long n,i;
    cin>>n;
    if(n<1)
        return 0;
    i=0;
    while(n!=1)
    {
         if(n%2==0)
            {n=n/2;}
        else
           {n=n/2*3+2;}
        i++;
    }
    cout<<i;
    return 0;
}

下面这个地方的解析更精彩:

《挑战编程:程序设计竞赛训练手册》- 题解(全)第一单元第一题

http://blog.csdn.net/metaphysis/article/details/6431937

 
原文地址:https://www.cnblogs.com/huashanqingzhu/p/3436734.html