1 条题解

  • 6
    @ 2024-4-27 19:26:00

    【题目大意】

    已知班上有N位同学,每位同学有从 0 到N − 1 的唯一编号,集合的时候到达的同学都会报出自己的编号,不会报出别人的编号,但有的同学会多次报出。问哪些同学没有到达。

    【考纲知识点】

    循环结构(一级),模拟法、一维数组(三级)

    【解题思路】

    1. 使用 arrive 数组来记录每个同学是否到达,初始为 false,表示没有到达。
    2. 每有一个同学报出编号,就将 arrive 数组对应的编号改为 true。
    3. 遍历 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
    上传者