算法经典入门3n+1问题

算法竞赛入门经典里面的3n+1问题,有一个疑点。

对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。 经过若干次这样的变换,一定会使n变为1。 输入n,输出变换的次数。n≤109。

下面是有bug代码,我在while循环里面打印了n,在循环外面也打印了n,但是出来的两个n不一样,循环也只进行了一次,正常理论来说,循环里面的n也应该是-1332004332才对,但是为什么里面的n是6422040呢?

#include 
int main()
{
    int n, count = 0;
    scanf("%d", &n);
    while (n > 1)
    {
        if (n % 2 == 1)
        {
            n = n * 3 + 1;
            printf("循环内:%d\n", &n);//这里的结果是6422040
        }

        else
        {
            n /= 2;
        }

        count++;
    }
    printf("%d\n", count);
    printf("循环外:%d\n", n);//这里的结果是-1332004332
    return 0;
}

这是输出的结果

img

你的n值给的对不对 或者是传参数没 我给了初始值 还有你的初始值判断是否是在允许的范围内987654321传入*3都多少了

循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
循环内:-1070693752
113
循环外:1

#include <stdio.h>
int main()
{
    int n=109, count = 0;
    scanf("%d", &n);
    while (n > 1)
    {
        if (n % 2 == 1)
        {
            n = n * 3 + 1;
            printf("循环内:%d\n", &n);//这里的结果是6422040
        }
 
        else
        {
            n /= 2;
        }
 
        count++;
    }
    printf("%d\n", count);
    printf("循环外:%d\n", n);//这里的结果是-1332004332
    return 0;
}

你的printf输出n的时候不要使用取地址符&,将&n的&去掉