首页 > 解决方案 > 在像 34,17..2,1 这样的 collat​​z 序列中,每行打印 40 个字符

问题描述

从 34,17,52,26,13...4,2,1 之类的 collat​​z 序列列表中。我想为每行打印 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,

标签: c

解决方案


对于初学者,您的代码会导致我的机器出现分段错误。您声明ptr为指向整数的指针int *ptr;,但您将其视为数组并将值存储到其中ptr[j] = i;。如果要将数据放入数组中,则需要 malloc 缓冲区或将 ptr 声明为堆栈上的数组,即int ptr[SIZE].

指针本身并不是一种存储方式。如果你想有一个数组来存储,那么你需要在堆栈或堆上显式分配一个数组。


推荐阅读