OJ判题错误求助:团队成员统计问题代码排查
问题描述
房间里有N×N个人,每人属于编号1到N的某支队伍,衬衫上印着0到N的数字——0代表观众,其他数字对应所属队伍编号。莉莉需要统计不完整的队伍数量,不完整的定义是该队伍在场成员数不足N名。
输入格式
- 第一行输入整数N(参赛队伍总数)
- 接下来N行,每行包含N个整数Aij(取值0到N),代表对应位置人的衬衫数字
约束条件
- 1 ≤ N ≤ 100
输出格式
输出房间里不完整的队伍数量
样例输入1
2 1 0 2 2
输出1
1
样例输入2
3 3 0 2 2 0 2 1 3 3
输出2
1
我的代码提交后始终被判错误
#include <stdio.h> int main() { int n, array[101][101], i, j, count = 0, k, x = 0; scanf("%d", &n); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { scanf("%d", &array[i][j]); } } for (k = 0; k < n; k++) { for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { if (array[i][j] == k + 1) { count += 1; } } } if (count != n) { x += 1; } count = 0; } printf("%d\n", x); return 0; }
问题分析与修正
你的代码核心错误在于判断条件:题目要求统计成员数不足N的队伍,但你写的是count != n——这会把成员数超过N的队伍也误判为不完整队伍。比如当N=2时,某队伍有3个成员,你的代码会错误地将其计入不完整队伍数量。
修正后的代码只需把判断条件改为count < n,同时将count的初始化移到内层循环开头,逻辑更稳妥:
#include <stdio.h> int main() { int n, array[101][101], i, j, count, k, x = 0; scanf("%d", &n); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { scanf("%d", &array[i][j]); } } for (k = 0; k < n; k++) { count = 0; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { if (array[i][j] == k + 1) { count += 1; } } } if (count < n) { x += 1; } } printf("%d\n", x); return 0; }
内容的提问来源于stack exchange,提问作者abbyrabbit
相关产品推荐
相关产品推荐

