news 2026/4/23 13:41:19

GESP2025年12月认证C++四级真题与解析(编程题2 (优先购买))

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP2025年12月认证C++四级真题与解析(编程题2 (优先购买))

一、先看原题:


二、题目解析:

1、📖 故事背景(先把题目“变简单”)

小 A 有一些钱 💰,
他走进了一家商店 🏬,
商店里有很多商品,每个商品都有:

  • 🏷️名字(name)

  • 💵价格(price)

  • 优先级(priority)

⚠️注意:优先级数字越小,级别越高!


🧠 小 A 的“买东西三大规则”

小 A 买东西非常讲规矩

🥇规则 1:
👉 永远先买优先级最高(数字最小)的商品

🥈规则 2:
👉 如果优先级一样,买价格最便宜

🥉规则 3:
👉 如果优先级、价格都一样,买名字字典序最小


🎯 题目要我们做什么?

👉 按上面三条规则,
👉 用小 A 的预算,把能买的商品都买下来
👉最后,把买到的商品名,按字典序输出


2、🧠 整体解题思路(先有“大脑地图”)

这道题的本质是一句话:

🧩“先按规则排序 → 再从前往后买 → 最后把名字排一下输出”

所以可以分成3 大步

1️⃣ 把商品按“购买规则”排序
2️⃣ 按顺序,一个一个买(看钱够不够)
3️⃣ 把买到的商品名字排序后输出


3、🧱 一步一步拆解


✅ 第一步:用结构体表示一个商品 📦

struct Item { string name; // 商品名 int price; // 价格 int priority; // 优先级(越小越好) };

🧒 可以这样理解:

一个Item
就是一张商品信息卡片


✅ 第二步:讲清楚 “怎么买才算更好” 🏆

我们要写一个比较规则函数

bool cmp(const Item &a, const Item &b) { if (a.priority != b.priority) return a.priority < b.priority; // 优先级小的先 if (a.price != b.price) return a.price < b.price; // 价格低的先 return a.name < b.name; // 名字小的先 }

🧒 这段话的意思是:

比较两个商品 a 和 b:

① 谁更重要?
② 谁更便宜?
③ 谁名字更靠前?


🧠 知识点小总结

📌sort + cmp是四级重点

✔ 规则清楚
✔ 写起来反而不难


✅ 第三步:把所有商品按规则排好队 🚶‍♂️🚶‍♀️

sort(items, items + N, cmp);

🧒 想象:

商品们排成一条长队
👉最值得买的排在最前面


✅ 第四步:开始买买买 💸

int budget = M; int count = 0; for (int i = 0; i < N; i++) { if (items[i].price <= budget) { budget -= items[i].price; bought[count++] = items[i].name; } }

🧒 每一步发生什么?

  • 看第 i 个商品

  • 钱够不够?

    • ✔ 够 → 买!

    • ❌ 不够 → 跳过


✅ 第五步:按字典序输出商品名 📄

⚠️ 题目特别要求:

输出时,商品名要按字典序从小到大

所以我们再排一次:

sort(bought, bought + count);

🧠 四、完整参考程序

#include <iostream> #include <algorithm> #include <string> using namespace std; struct Item { string name; int price; int priority; }; bool cmp(const Item &a, const Item &b) { if (a.priority != b.priority) return a.priority < b.priority; if (a.price != b.price) return a.price < b.price; return a.name < b.name; } int main() { int M, N; cin >> M >> N; Item items[1005]; for (int i = 0; i < N; i++) { cin >> items[i].name >> items[i].price >> items[i].priority; } // 按购买规则排序 sort(items, items + N, cmp); string bought[1005]; int count = 0; int budget = M; // 按顺序购买 for (int i = 0; i < N; i++) { if (items[i].price <= budget) { budget -= items[i].price; bought[count++] = items[i].name; } } // 输出前按字典序排序 sort(bought, bought + count); for (int i = 0; i < count; i++) { cout << bought[i] << endl; } return 0; }

🧠 五、这道题在考什么?

🎯 核心能力清单

  • ✅ 创建结构体

  • ✅ 多条件排序(非常重要!)

  • sort + cmp的使用

  • ✅ 模拟现实规则

  • ✅ 字符串字典序


🎒 六、这道题的“买东西口诀”

🧠优先购买四步法

1️⃣ 商品排队
2️⃣ 从优先的买起
3️⃣ 钱不够就跳
4️⃣ 名字再排输出


🎉 总结

🌟 这是一道规则多,但逻辑非常清楚的好题
🌟 解决这个问题需要:

  • 思路拆分能力

  • 排序规则表达能力

  • 模拟真实问题的能力


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 18:49:57

[Windows] 视频剪辑编辑软件中文绿色版ShotCut v25.12.31

[Windows] 视频剪辑编辑软件中文绿色版ShotCut v25.12.31 链接&#xff1a;https://pan.xunlei.com/s/VOhsv0g5968fcOz2330M3EtbA1?pwd9n9v# Shotcut是一个免费开源的视频编辑软件&#xff0c;它可以帮助用户编辑、剪辑和处理视频文件。 Shotcut支持多种常见视频格式&#x…

作者头像 李华
网站建设 2026/4/23 8:32:41

让游戏更真实的物理引擎,助力你的VR应用!

Jolt Physics&#xff1a;高性能物理引擎 在现代游戏和虚拟现实应用中&#xff0c;物理引擎的表现至关重要。Jolt Physics 是一款针对多核优化的刚体物理和碰撞检测库&#xff0c;采用 C 语言编写&#xff0c;特别适合游戏和虚拟现实应用&#xff0c;被《地平线&#xff1a;西…

作者头像 李华
网站建设 2026/4/23 8:32:15

YOLOFuse TensorRT加速方案探索:提升推理速度达3倍以上

YOLOFuse TensorRT加速方案探索&#xff1a;提升推理速度达3倍以上 在夜间监控、边境安防或自动驾驶的夜路感知场景中&#xff0c;仅依赖可见光摄像头的目标检测系统常常“失明”——低光照、逆光、烟雾遮挡让传统算法频频漏检。而红外图像虽能穿透黑暗&#xff0c;却缺乏纹理…

作者头像 李华
网站建设 2026/4/23 8:32:46

YOLOFuse英文文档改进:提升国际影响力的关键一步

YOLOFuse英文文档改进&#xff1a;提升国际影响力的关键一步 在低光照的街道上&#xff0c;摄像头难以捕捉行人踪迹&#xff1b;在浓烟弥漫的火场中&#xff0c;无人机视觉系统频频失效——这些现实场景暴露出单一可见光检测的固有缺陷。当传统YOLO模型在黑暗中“失明”时&…

作者头像 李华
网站建设 2026/4/23 8:31:18

YOLOFuse UltraISO注册码最新获取渠道(非官方)提示

YOLOFuse&#xff1a;多模态目标检测的轻量化实践之路 在城市安防系统中&#xff0c;夜间监控常常面临“看得见却辨不清”的尴尬——红外摄像头能捕捉热源&#xff0c;但缺乏细节纹理&#xff1b;可见光相机在低照度下则几乎失效。这种场景下的目标检测需求&#xff0c;正推动着…

作者头像 李华
网站建设 2026/4/23 13:00:30

YOLOFuse API封装示例:构建RESTful接口供前端调用

YOLOFuse API封装示例&#xff1a;构建RESTful接口供前端调用 在夜间监控、边境巡逻或火灾救援等场景中&#xff0c;传统的可见光摄像头常常因为低光照、烟雾遮挡等问题“失明”。而红外成像虽然能在黑暗中看清热源轮廓&#xff0c;却难以识别目标的细节特征。如何让AI系统像人…

作者头像 李华