GESP2023年6月认证C++三级( 第三部分编程题(1、春游))
一、 故事背景春游点名危机老师带着同学们去春游啦班上有n 个同学每个人都有一个编号0, 1, 2, 3, ..., n-1到了集合时间老师开始点名但是……有的同学很调皮 有人会重复报名字 有人根本没来老师着急地说“谁没到快帮我找出来”二、 我们的任务 输入n总人数m报数次数m 个编号谁喊了名字 输出如果全来了 输出 n否则 输出没来的同学编号从小到大三、️ 思路用故事理解1、 第一步准备“签到本”我们准备一个数组bool arrive[1000];含义 arrive[i] false 同学 i 还没来 arrive[i] 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六、 知识点总结✨ 用数组记录状态✨ 去重重复报数不影响✨ 遍历检查✨ 条件输出✨ 模拟真实问题
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2557418.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!