c - 在像 34,17..2,1 这样的 collatz 序列中,每行打印 40 个字符
问题描述
从 34,17,52,26,13...4,2,1 之类的 collatz 序列列表中。我想为每行打印 40 个字符,例如“50、25、76、38、19、58、29 , 88, 44, 22," 将是 40 个字符的第一行,然后是下一行,当最后一个数字是 4、2、1 时应该停止当遇到 4、2、1 序列时我无法停止程序。
我首先创建了所需的数字序列。试图通过 for 循环打印数字的帖子,while 条件为 1。
int length;
int *ptr;
int i = 50, j = 0;
for (i; i >= 2; )
{
if (i % 2 == 0)
{
i = i / 2;
}
else if (i % 2 != 0)
{
i = (3 * i) + 1;
}
ptr[j] = i;
printf("Total Value: %d, \n", ptr[j]);
j++;
}
for (i = 0; i < 50; )
{
j = 10 + i;
while (i < j)
{
printf("%d, ", ptr[i]);
i++;
if (ptr[i] == 1)
{
break;
}
}
printf("\n");
}
预期结果:
50, 25, 76, 38, 19, 58, 29, 88, 44, 22,
11, 34, 17, 52, 26, 13, 40, 20, 10, 5,
16, 8, 4, 2, 1,
解决方案
对于初学者,您的代码会导致我的机器出现分段错误。您声明ptr
为指向整数的指针int *ptr;
,但您将其视为数组并将值存储到其中ptr[j] = i;
。如果要将数据放入数组中,则需要 malloc 缓冲区或将 ptr 声明为堆栈上的数组,即int ptr[SIZE]
.
指针本身并不是一种存储方式。如果你想有一个数组来存储,那么你需要在堆栈或堆上显式分配一个数组。