我正在执行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);
}
[Solve] for循环和de while循环正在改变n
的值for(k=i; k<j;k++){
count =0;
n = k;
while( n!= 1){
. . .
答案 0 :(得分:2)
正在更改n
,并且正在退出while
循环。但是,之后执行的代码负责无限循环。
如果您无法使用调试器,请尝试在printf
之后添加count = 0
语句,以查看正在发生的情况。或者,假设while
循环确实退出n
= 1(它确实如此),当n
循环开始另一次迭代时,for
会发生什么?