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”并且控制台自行压缩。我正在使用开发。 对不起我糟糕的英语,但我希望我很清楚。
答案 0 :(得分:0)
我算了四个错误:
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;
}
}
答案 1 :(得分:0)
首先,while循环是错误的,你应该在array[count] == 1
时结束,所以你可以使用while(array[count] > 1)
进行测试。
第二,array[count]=i/2;
错了,你请使用array[count]=array[count-1]/2;
。
第三,您应该检查count < 50
,因为您声明了int array[50];
。
static void collatz(int i)
{
int x=0,a=0,res=0,count=0;
int array[50]= {0};
array[0]=i;
while(array[count] > 1 && count < 50)
{
if(array[count]%2==0)
{
count++;
array[count]=array[count-1]/2;
}
else
{
count++;
array[count]=3*array[count-1]-1;
}
}
}