问题标题: 酷町堂:2409

0
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
张天璨
张天璨
新手天翼
新手天翼
while(n!=1){
        if(n%2==0)
        {
            n/=2;
            ans++;
        }
        else
        {
            n=n*3+1;
            ans++;
        }
    }

 

0
我要回答