河岸柳 发表于 2021-8-2 07:46:54

新手求助

代码如下,求求解释以下运行原理,比如count++是是啥,计算的不是n的值吗?


int main()
{
        int n,count=0;
        scanf("%d",&n);
        while(n>1)
        {
                if(n%2==1)
                n=n*3+1;
                else
                n/=2;
                count++;
        }
        printf("%d\n",count);
       
        return 0;
}

青出于蓝 发表于 2021-8-2 07:46:55

哦,是我搞错了。这里应该是一个类似于中学数学题的东西(做过类似的),就是一个程序按思路运算,如果n是单数,n=3n+1,不然n=n除以2,直到n=1为止。
结果输出进行了多少次运算,count是用来计数的,所以输出count

青出于蓝 发表于 2021-8-2 08:11:43

这个程序就是计算2的几次方等于n,c中除法运算都是地板除(向下取整),所以任何一个整数进行循环地板除2都会得到0。
count++等于count=count+1,每进行一次地板除,count就+1,最后count等于多少,n就是2的count次方(因为是地板除,所以结果只会是整数)

大马强 发表于 2021-8-2 08:14:24

本帖最后由 大马强 于 2021-8-2 08:32 编辑

楼上正解
我试了试,输入不是2的幂集就会出现问题{:10_277:}

小小的窝 发表于 2021-8-2 09:07:42

你可以试着把所有变量列出来,像这样,然后就会发现这出问题了哈哈哈

小小的窝 发表于 2021-8-2 15:38:13

青出于蓝 发表于 2021-8-2 10:13
哦,是我搞错了。这里应该是一个类似于中学数学题的东西(做过类似的),就是一个程序按思路运算,如果n是 ...

是的

ferocitas 发表于 2021-8-2 16:44:35

count++的意思是count=count+1.
这段代码的意思是你输入一个数n,如果n>1,就进行运算。如果n除以2的余数是1,就进行n=n*3+1的操作;如果不是,就进行n=n/2的操作。直到n<1停止。同时每运行一次count就加一,记录了一共运行了多少次。

老迈 发表于 2021-8-2 19:43:33

..

myqf123 发表于 2021-8-4 10:27:04

这种计算有什么意义吗?本质上是判断一个数被2除的次数,但余数为1,干嘛要n=n*3+1呢,这样做之后的数与与除2的商有什么关联呢?愿意请教大神,

太二有仙气 发表于 2021-8-5 08:36:10

这个题目好像是一个你无论输入什么值,最后都会变成1。count是用来计数的,一共经历多少步。
页: [1]
查看完整版本: 新手求助