题目描述
老师带领同学们春游。已知班上有N位同学,每位同学有从0到N-1的唯一编号。到了集合时间,老师确认是否所有同学都到达了集合地点,就让同学们报出自己的编号。到达的同学都会报出的编号,不会报出别人的编号,但有的同学很顽皮,会多次报出。你能帮老师找出有哪些同学没有到达吗?
输入描述:
输入包含2行。第一行包含两个整数N和M,表示班级有N位同学,同学们共有 M次报出编号。约定2≤N, M ≤1000。 第二行包含M个整数,分别为M次报出的编号。约定所有编号都在合理范围内。
输出描述:
输出一行。如果所有同学都到达,则输出N;否则由小到大输出所有未到达的同学。
示例1
输入
复制
3 3 0 2 1
输出
复制3
3
示例2
输入
复制
3 5 0 0 0 0 0
输出
复制
1 2
思路:将每个同学到场的信息记录在一个布尔型数组中,最终输出未到场的同学编号。
C++ 代码
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<bool> arrived(n, false);
for (int i = 0; i < m; i++) {
int id;
cin >> id;
arrived[id] = true;
}
bool all_arrived = true;
for (int i = 0; i < n; i++) {
if (!arrived[i]) {
cout << i << " ";
all_arrived = false;
}
}
if (all_arrived) {
cout << n;
}
cout << endl;
return 0;
}