0
已解决
2409 角谷定理
题目描述 Description
输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:输入22,共经过了15步的变化,输出:
11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
STEP=15
输入描述 Input Description
n
输出描述 Output Description
输出变化的次数
样例输入 Sample Input
22
样例输出 Sample Output
15
0
已采纳
非常高兴能为你解答此题。
对于一个自然数,当它!=1时,while循环开始执行
在这个循环中,每次对自变量n,也就是这个自然数判断,如果是偶,n=n/2;如果是奇,n=n*3+1;
直到循环结束为止,但是题目让我们求循环次数,这时我们定义ans,在每次判断玩并且把n自己赋值后,ans++。次数加一。
即:
if(n%2==0)
{
n/=2;
ans++;
}
else
{
n=n*3+1;
ans++;
}
注意:因为是自然数,考虑到n一开始为1的情况,while循环就不执行了,所以:
if(n==1)
cout<<0;
0
0