在LightOJ中解决#1015(画笔)

时间:2014-12-31 14:47:03

标签: c

我正在努力解决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说我得到了错误的答案。我该如何解决?

1 个答案:

答案 0 :(得分:2)

您正在获得WA,因为您的代码展示了UB(Undefined Behaviour)。您假设长度为nn为自然数的数组的有效索引从1开始,到n结束。这是错误的。对于长度为nn是自然数)的数组,数组索引从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]);

这样你就可以获得理想的结果。