我在网上解决一个问题。我已经写好了代码,除了我输入比平常大的数字(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;
}
1条答案
按热度按时间jyztefdp1#
当i〉520时,这行代码可能是一个越界访问(也就是你试图访问数组days边界之外的索引)。