1 条题解
-
6
【题目大意】
已知班上有N位同学,每位同学有从 0 到N − 1 的唯一编号,集合的时候到达的同学都会报出自己的编号,不会报出别人的编号,但有的同学会多次报出。问哪些同学没有到达。
【考纲知识点】
循环结构(一级),模拟法、一维数组(三级)
【解题思路】
- 使用 arrive 数组来记录每个同学是否到达,初始为 false,表示没有到达。
- 每有一个同学报出编号,就将 arrive 数组对应的编号改为 true。
- 遍历 arrive 数组,将数组中对应位置为 false 的下标输出并特判所有人均到达的情况。
【参考程序】
#include <iostream> using namespace std; bool arrive[1000]; int main() { int n = 0, m = 0; cin >> n >> m; // 初始化 arrive 数组为所有同学均未报到 for (int i = 0; i < n; i++) arrive[i] = false; // 依次报到 m 次 for (int i = 0; i < m; i++) { int code = 0; cin >> code; arrive[code] = true; } // 依次检查 n 位同学是否到达 bool all = true; for (int i = 0; i < n; i++) { if (!arrive[i]) { if (all) { cout << i; all = false; } else { cout << " " << i; } } } // 处理全部到达的特殊情况 if (all) cout << n; cout << endl; return 0; }
- 1
信息
- ID
- 563
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 338
- 已通过
- 114
- 上传者