/*首先,定义这样一个函数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