#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