我正在实现 3n+1 算法,但由于某种原因,当 n=2 时,除法 n = n/2 不会改变值,从而创建无限循环,我看不到为什么:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=0,j=0,n=0,count,max;
scanf("%d",&i);
scanf("%d",&j);
max = 0;
for(n=i; n<=j; n++){
count = 0;
while(n != 1){
//Debug print
printf("%d - %d\n",count,n);
if(n%2 != 0){ //Odd
n = 3 * n + 1;
} else { //Even
n = n / 2;
//n /= 2;
//n = n >> 1;
}
count++;
}
max = (count > max) ? count : max;
}
printf("%d %d %d\n",i,j,max);
exit(EXIT_SUCCESS);
}
[解决]for循环和de while循环改变了n的值
for(k=i; k<j;k++){
count =0;
n = k;
while( n!= 1){
. . .
最佳答案
它正在改变n
,并且正在退出while
循环。但是,此后执行的代码会导致无限循环。
如果您无法使用调试器,请尝试在 count = 0
之后添加一条 printf
语句,看看发生了什么。或者,假设 while
循环确实以 n
=1 退出(确实如此),当您开始另一次迭代时 n
会发生什么for
循环?
关于c - C 中的除以 2 和无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40271608/