算法竞赛入门经典里面的3n+1问题,有一个疑点。
对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。 经过若干次这样的变换,一定会使n变为1。 输入n,输出变换的次数。n≤109。
下面是有bug代码,我在while循环里面打印了n,在循环外面也打印了n,但是出来的两个n不一样,循环也只进行了一次,正常理论来说,循环里面的n也应该是-1332004332才对,但是为什么里面的n是6422040呢?
#include <stdio.h>
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;
}
这是输出的结果