尼克斯彻定理,数组的最后一位输出错误!

#include <stdio.h>
#include <stdbool.h>
int main()
{
    int i, j, n, num, cube, sum = 0;
    bool result = true;
    char ans;

    printf("请输入一个整数:");
    scanf("%d", &num);

    int arr[num][4];

    for (n = 3; n <= num; n++)
    {
        arr[n][0] = 0;
    }

    for (n = 3; n <= num; n++)
    {
        cube = n * n * n;
        for (i = 1; i < cube / 2; i += 2)
        {
            for (j = i; j < cube / 2; j += 2)
            {
                sum += j;
                if (sum == cube)
                {
                    arr[n][0] = cube;
                    arr[n][1] = i;
                    arr[n][2] = i + 2;
                    arr[n][3] = j;
                    goto END;
                }
                if (sum > cube)
                {
                    sum = 0;
                    break;
                }
            }
        }
    END:
        sum = 0;
    }
    for (n = 3; n <= num; n++)
    {
        if (arr[n][0] == 0)
        {
            result = false;
            break;
        }
        if (result)
        {
            printf("经验证,3 ~ %d 符合该定理!\n\n", num);
            printf("是否打印全部结果(y/n):");
            getchar();
            scanf("%c", &ans);
            break;
        }
        else
        {
            printf("验证失败: %d 无法找到对应的连续奇数!\n", arr[n][0]);
        }
    }
    if (ans == 'y')
    {
        for (n = 3; n <= num; n++)
        {
            if (arr[n][3] - arr[n][1] > 4)
            {
                printf("%d^ == %d = %d + %d ... %d\n", n, arr[n][0], arr[n][1], arr[n][2], arr[n][3]);
            }
            else
            {
                printf("%d^ == %d = %d + %d + %d\n", n, arr[n][0], arr[n][1], arr[n][2], arr[n][3]);
            }
        }
    }

    return 0;
}

 int arr[num][4];改为int arr[num+1][4];

因为你后面数组下标用到了num,这已经数组越界了

应该是临界条件的控制有点问题吧

标题

 

 

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632