春游

【问题描述】

老师带领同学们春游。已知班上有�位同学,每位同学有从0到�−1的唯 一编号。到了集合时间,老师确认是否所有同学都到达了集合地点,就让同学们 报出自己的编号。到达的同学都会报出的编号,不会报出别人的编号,但有的同 学很顽皮,会多次报出。你能帮老师找出有哪些同学没有到达吗?

【输入描述】

输入包含2行。第一行包含两个整数�和�,表示班级有�位同学,同学们 共有�次报出编号。约定2≤�,�≤1000。

第二行包含�个整数,分别为�次报出的编号。约定所有编号都在合理范围 内。 【输出描述】 输出一行。如果所有同学都到达,则输出�;否则由小到大输出所有未到达 的同学编号,空格分隔。

【样例输入1】

3 3

0 2 1

【样例输出1】

3

【样例输入2】

3 5

0 0 0 0 0

【样例输出2】

1 2

【解题思路】

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;

}

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值