static void collatz(int i)
{
int x=0,a=0,res=0,count=0;
int array[50];
array[0]=i;
while(array[count]!=0)
{
if(array[count]%2==0)
{
count++;
array[count]=i/2;
}
else
{
count++;
array[count]=3*array[count-1]-1;
}
}
}
int main()
{
int a;
scanf("%d",&a);
collatz(a);
system("pause");
return 0;
}
当我编译并运行代码时,我输入 8 作为“a”,然后控制台崩溃了。我正在使用 dev c。 抱歉我的英语很糟糕,但我希望我已经足够清楚了。
最佳答案
我数了四个错误:
- 当
array[count]
为1
而不是0
时,循环应该终止 - 您应该检查
count
是否小于 49 array[count]=i/2
应该是array[count]=array[count-1]/2
array[count]=3*array[count-1]-1
应该是array[count]=3*array[count-1]+1
因此修复了这些问题并略微缩短的代码可能是:
static void collatz(int i) {
int count=0;
int array[50];
array[0]=i;
while (count < 49) {
int j = array[count++];
if (j == 1)
break;
else if(j % 2 == 0)
array[count]=j/2;
else
array[count]=3*j+1;
}
}
关于collatz c代码逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22648948/