我正在在线解决问题。我已经编写了代码,并且它在大多数情况下都有效,除了当我输入比平常大的数字(1000 到 2000)时。当我这样做时,程序崩溃并返回一个非常小的负数。 造成这种情况的原因是什么?
Here是问题的链接。
#include <stdio.h>
#include <stdlib.h>
int main() {
int z, T;
scanf("%d", &T);
for (z = 0; z < T; z++) {
int i, j, N, P;
scanf("%d%d", &N, &P);
int days[3651] = { 0 };
int hartal[10];
int count = 0;
for (i = 0; i < P; i++) {
scanf("%d", &hartal[i]);
}
for (i = 1; i < N + 1; i++) {
days[6] = 2;
days[6 + (i * 7)] = 2;
days[7] = 2;
days[7 + (i * 7)] = 2;
}
for (i = 0; i < P; i++) {
int a = hartal[i];
for (j = 0; j < N + 1; j++) {
if (j % a == 0 && days[j] != 2) {
days[j] = 1;
}
}
}
for (i = 1; i < N + 1; i++) {
if (days[i] == 1) {
count++;
}
}
printf("%\n%d\n", count);
}
return 0;
}
最佳答案
days[6+(i*7)] = 2;
该行代码可能是越界访问。 (也就是说,您将尝试访问数组天数范围之外的索引。)当 i > 520 时。
关于c - 当我插入较大的数字时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59490675/