Ich mache eine Implementierung des 3n + 1-Algorithmus, aber aus irgendeinem Grund, wenn n = 2, ändert die Division n = n/2 nicht den Wert und schafft eine unendliche Schleife, und ich kann nicht sehen, warum:Division durch 2 und Endlosschleife in C
#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] die for-Schleife und de while-Schleife den Wert von n Wechsel wurde
for(k=i; k<j;k++){
count =0;
n = k;
while(n!= 1){
. . .
Ich empfehle zu lernen, wie man einen Debugger verwendet, um durch den Code zu gehen und die Variablen zu untersuchen. – dandan78
Es scheint, dass Sie die Collatz-Vermutung widerlegt haben .... –