GESP2023年6月认证C++三级( 第三部分编程题(1、春游))


一、🎒 故事背景:春游点名危机!

👩‍🏫老师带着同学们去春游啦!

班上有 n 个同学,每个人都有一个编号:

复制代码
0, 1, 2, 3, ..., n-1

到了集合时间,老师开始点名!

但是......😵

有的同学很调皮:

👉 有人会 重复报名字

👉 有人 根本没来!

老师着急地说:

"谁没到?快帮我找出来!"


二、🧠 我们的任务

👉 输入:

  • n(总人数)

  • m(报数次数)

  • m 个编号(谁喊了名字)

👉 输出:

  • 如果 全来了 👉 输出 n

  • 否则 👉 输出 没来的同学编号(从小到大)


三、🏗️ 思路(用故事理解!)

1、🌟 第一步:准备"签到本"

我们准备一个数组:

复制代码
bool arrive[1000];

🎯含义:

👉 arrivei = false 👉 同学 i 还没来

👉 arrivei = true 👉 同学 i 已经到了


2、🌟 第二步:初始化(全部没来)

复制代码
for (int i = 0; i < n; i++)
    arrive[i] = false;

🧠就像老师说:

"我先假设大家都没到!"


3、🌟 第三步:听同学报数

复制代码
for (int i = 0; i < m; i++) {
    int code;
    cin >> code;
    arrive[code] = true;
}

🎯意思:

👉 谁报名字,就标记为"来了"

就算有人喊了 10 次:

👉 还是只算来了一次 ✔


4、🌟 第四步:检查谁没来

复制代码
bool all = true;

for (int i = 0; i < n; i++) {
    if (!arrive[i]) {
        // 说明没来
    }
}

🧠我们一个个检查:

👉 "0号来了吗?"

👉 "1号来了吗?"

👉 ......


5、🌟 第五步:输出结果

🎯情况1:有人没来

复制代码
if (!arrive[i]) {
    cout << i;
}

👉 输出没来的编号


🎯情况2:全来了!

复制代码
if (all)
    cout << n;

🎉输出总人数 n!


四、💻 参考代码

复制代码
#include <iostream>
using namespace std;

bool arrive[1000];

int main() {
    int n, m;
    cin >> n >> m;

    // 初始化:全部没来
    for (int i = 0; i < n; i++)
        arrive[i] = false;

    // 记录报到
    for (int i = 0; i < m; i++) {
        int code;
        cin >> code;
        arrive[code] = true;
    }

    // 检查谁没来
    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、🌟输入:

复制代码
3 5
0 0 0 0 0

👉 只有 0号一直喊 😂


2、🧠分析:

同学 状态
0 来了
1 ❌没来
2 ❌没来

3、🎯输出:

复制代码
1 2

六、🏆 知识点总结

✨ 用数组记录状态

✨ 去重(重复报数不影响)

✨ 遍历检查

✨ 条件输出

✨ 模拟真实问题


相关推荐
sm_926787057 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
by209997 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
colinu8 小时前
C++ 异步任务与线程生命周期:`std::async`、`future`、`thread`、`jthread` 与协作式退出
java·jvm·c++
wuminyu8 小时前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
longlongzihan8 小时前
链表找环:Floyd 判圈算法(LeetCode 141 & 142 )
c++·算法·leetcode·链表
liulilittle9 小时前
Linux 下 select 测试函数
linux·服务器·网络·数据库·c++·select·c
无忧.芙桃9 小时前
C++语言原理与实践(十二):list类的底层实现
c++·windows·list
沫璃染墨9 小时前
《Linux工程实践篇(二):线程池实战——从线程安全单例到完整源码实现》
linux·开发语言·c++·单例模式·设计模式·系统架构
有只小白叫岳飒10 小时前
c++智能指针 unique_ptr与函数调用
c++
Leo.yuan10 小时前
Kafka+Flink拼凑,还是FineDataLink 5.0一体化?实时数据处理的两种思路
c++·mfc