我正在努力解决the following problem。
输入以整数T(≤100)开头,表示测试用例的数量。
每个案例都以空行开头。下一行包含一个整数N(1≤N≤1000),意味着有N个学生。下一行将包含由空格分隔的N个整数,表示所有学生的灰尘单位。任何学生的防尘装置不得超过两位数。
对于每种情况,打印案例编号和所需的总粉尘单位。
+--------------+-------------------------+
| Sample Input | Output for Sample Input |
+--------------+-------------------------+
| 2 | Case 1: 16 |
| | Case 2: 100 |
| 3 | |
| 1 5 10 | |
| | |
| 2 | |
| 1 99 | |
+--------------+-------------------------+
这是我的代码:
#include <stdio.h>
int main() {
int kase = 0;
int i = 0, j = 0;
do {
scanf("%d", &kase);
} while (kase > 100);
int group[kase];
int tdust[kase];
for (i = 1; i <= kase; i++) {
tdust[i] = 0;
printf("\n");
do {
scanf("%d", &group[i]);
} while (group[i] < 1 || group[i] > 1000);
int stdNumber[group[i]];
for (j = 1; j <= group[i]; j++) {
do {
scanf("%d", &stdNumber[j]);
} while (stdNumber[j] >= 100);
tdust[i] = tdust[i] + stdNumber[j];
}
}
for (i = 1; i <= kase; i++)
printf("\nCase %d: %d", i, tdust[i]);
}
当我提交我的代码时,OnlineJudge说我得到了错误的答案。我该如何解决?
答案 0 :(得分:2)
您正在获得WA,因为您的代码展示了UB(Undefined Behaviour)。您假设长度为n
且n
为自然数的数组的有效索引从1开始,到n
结束。这是错误的。对于长度为n
(n
是自然数)的数组,数组索引从0开始,以n-1
结束。
要解决此问题,请更改
for(i=1; i<=kase; i++)
要
for(i=0; i<kase; i++)
同样地,对所有其他循环执行相同操作。也改变
printf("\nCase %d: %d",i,tdust[i]);
要
printf("\nCase %d: %d",i+1,tdust[i]);
这样你就可以获得理想的结果。