C 语言中的数组和循环程序正在处理一个测试用例,但不适用于另一个测试用例

the array and loop program in c is working on one test case but not working on the other one

提问人:Short 提问时间:9/23/2023 最后编辑:chux - Reinstate MonicaShort 更新时间:9/23/2023 访问量:67

问:

软件工具是文件存储库,通常是计算机程序源代码的文件,具有受监控的访问。对源所做的每项更改都会被跟踪,以及谁进行了更改、他们为什么进行更改,以及对更改所修复的问题或引入的增强功能的引用。 软件工具对于任何形式的分布式协作开发都是必不可少的。无论是 wiki 页面还是大型软件开发项目的历史记录,跟踪每个更改并在必要时撤消更改的能力可以使管理和控制良好的流程与不受控制的“先到先得”系统之间产生巨大差异。它还可以作为软件项目尽职调查的机制。 在这个问题中,我们将考虑一个开发项目的简化模型。假设项目中有 N 个源文件。所有源文件都是不同的,编号从 1 到 N。 该工具用于维护项目,包含两个源文件序列。第一个序列包含工具忽略的源文件。如果源文件不在第一个序列中,则认为它未被忽略。第二个序列包含由工具跟踪的源文件。如果源文件不在第二个序列中,则认为它未被跟踪。源文件可以是这两个序列中的任何一个,也可以不是这两个序列中的任何一个。 约束: 1 ≤ 吨 ≤ 100 1 ≤ M, K ≤ N ≤ 100 1 ≤ A1 < A2 < ...< 上午 ≤ N 1 ≤ B1 < B2 < ...< BK ≤ N 输入 输入的第一行包含一个整数 T,表示测试用例的数量。下面是 T 测试用例的描述。 测试用例描述的第一行包含三个整数 N、M 和 K,表示项目中源文件的数量、忽略的源文件的数量和跟踪的源文件的数量。 第二行包含 M 个不同的整数,表示忽略的源文件的序列 A。序列严格增加。 第三行包含 K 个不同的整数,表示跟踪源文件的序列 B。序列严格增加。 输出: 打印被跟踪和忽略的源文件的数量,以及未跟踪和未忽略的源文件的数量。

正在运行的测试用例

INPUT (STDIN)
2
7 4 6
1 4 6 7
1 2 3 4 6 7
4 2 2
1 4
3 4
EXPECTED OUTPUT
4 1
1 1

无法正常工作的测试用例

INPUT (STDIN)
2
7 3 6
1 4 6 7
1 2 3 4 6 7
4 2 2
1 4
3 3
EXPECTED OUTPUT
3 1
2 3

强制性案例

KEYWORD
int a[m],b[k]
KEYWORD
while
KEYWORD
for

复杂性测试用例

CYCLOMATIC COMPLEXITY
9
TOKEN COUNT
245
NLOC
31
#include <stdio.h>

int main() {
  int t, i;
  scanf("%d", &t);
  while (t--) {
    int n, m, k, c1 = 0, c2 = 0;
    scanf("%d%d%d", &n, &m, &k);
    int a[m], b[k], c[101];
    for (i = 0; i <= 101; i++)
      c[i] = 0;
    for (i = 0; i < m; i++) {
      scanf("%d", &a[i]);
      c[a[i]]++;
    }
    for (i = 0; i < k; i++) {
      scanf("%d", &b[i]);
      c[b[i]]++;
    }
    for (i = 0; i < 101; i++) {
      if (c[i] == 2) {
        c1++;
      }
    }
    for (i = 1; i <= n; i++) {
      if (c[i] == 0) {
        c2++;
      }
    }
    printf("%d %d\n", c1, c2);
  }
  return 0;
}
数组 C 循环

评论


答:

1赞 chux - Reinstate Monica 9/23/2023 #1

至少这个问题

在数组边界外写入

循环迭代 102 次以填充 101 大小的数组。

    int a[m], b[k], c[101];
    for (i = 0; i <= 101; i++)
      c[i] = 0;

OP 可能需要for (i = 0; i < 101; i++)