news 2026/10/18 5:21:13

GESP 2023年9月 买文具 题解|这题分支结构的坑一定要避开

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP 2023年9月 买文具 题解|这题分支结构的坑一定要避开

今天继续刷 GESP 2023年9月 的真题。这道分支结构题属于「思路简单但细节多」的类型,很多同学代码写完了却过不了,问题基本都出在下面要讲的几个点上。

题目来源:ACGO A46076 | 2023年9月 一级
赛事场次:2023年9月 一级

一、题目信息

题目名称:买文具

赛事场次:2023年9月 一级

难度定位:一级

涉及知识点:分支结构

题目链接:https://www.acgo.cn/problemset/info/46076

坑点(无数人 WA 的核心)

  • 条件表达式的真假判断;if-else 的配对;多分支的覆盖完整性。

题意简述

开学了,小明来到文具店选购文具。签字笔 2 元一支,他需要 X 支;记事本 5 元一本,他需要 Y 本;直尺 3 元一把,他需要 Z 把。小明手里有 Q 元钱。请你通过编程帮小明算算,他手里的钱是否够买他需要的文具。

前置知识

下面先把需要的基础知识理一遍,不熟悉的朋友可以跟着看,熟悉的直接跳过。

if-else 的配对:一个 if 最多配一个 else,多个条件判断用 else if 链。注意判断相等要用==,写成=是赋值,编译器可能不报错但逻辑全错。

多分支的覆盖:写条件时要想清楚所有情况是否都被覆盖,特别是边界值,比如分数等于 60 到底算及格还是不及格。

二、思路分析

先看清楚题目要我们做什么

把题目读两遍,我们提取出关键信息:输入是什么、要输出什么、有哪些约束条件。这道题考查的是分支结构,属于这类题里比较基础的一道,把题目要求一步步翻译成代码逻辑就能解决。

我的思考过程

读完题之后,我的第一反应是这样的:程序首先读取小明购买签字笔、记事本、直尺以及手里的钱数。然后,计算总花费,即签字笔数量乘以 2 ,记事本数量乘以 5 ,直尺数量乘以 3 的总和。接着,通过比较总花费和手里的钱数,输出相应的结果。如果钱够,输出 " Yes " 和剩余的钱数;如果不够,输出 " No " 和缺少的钱数。

需要说明的是,上面这个思路是把题目要求直译成代码得到的,没有用到什么高级技巧。对于这类基础题,读准题意加写对边界比追求巧妙解法更重要,因为考试里这种题是必须拿满分的。

三、完整代码 + 逐行注释

#include <iostream> using namespace std; int main() { int x = 0, y = 0, z = 0, q = 0; cin >> x >> y >> z >> q; // 读入 // 计算总花费 int totalCost = x * 2 + y * 5 + z * 3; // 判断钱是否够 if (q >= totalCost) { // 判断 cout << "Yes" << endl; // 输出 cout << q - totalCost << endl; // 输出剩余的钱 } else { cout << "No" << endl; // 输出 cout << totalCost - q << endl; // 输出缺少的钱 } return 0; }

四、代码分段拆解

为了看得更清楚,我们把代码按功能分成几段解释。

第一步:引入头文件

#include <iostream> using namespace std;

#include <iostream>提供输入输出功能,using namespace std;让我们能直接写cin、cout而不用加前缀。这两行是几乎所有 C++ 程序的开头,照写即可。

第二步:读入数据

cin >> x >> y >> z >> q;

注意变量的类型要能装下题目的数据。数据可能超过 21 亿时要改用long long。

第四步:按要求输出

cout << "Yes" << endl; cout << q - totalCost << endl; // 输出剩余的钱

输出格式必须和题目要求的完全一致。很多同学算法完全正确却因为少了一个换行或者空格多寡不对而 WA,这种分丢得最可惜。

五、实例模拟

下面用样例数据走一遍流程,你能看到每一步变量是怎么变化的。

以题目的第一组样例为例:

样例输入

1 1 1 20

样例输出

Yes 10

把这份输入代进代码,程序会先把数据依次读入,然后进入循环逐个判断,把满足条件的值累积起来,最后按格式输出。建议你对照着代码在纸上走一遍前两次循环,确认自己对每一步的理解都和程序一致。

题目另外还给了 1 组样例,做完之后建议把剩下的样例都跑一遍,全部通过再提交,能避开大部分边界问题。

六、踩坑总结

下面是做这道题时最容易出错的地方,对照自己的代码检查一下:

  1. 变量类型选错:虽然本题范围不大,但养成习惯——凡是不确定范围时,累加变量一律用long long,成本为零但能保命。
  2. 输出格式不符:题目要求输出几行就输出几行,行末换行、数字之间的空格都要严格对齐,算法对了但格式错了同样判 WA,这种分丢得最冤。
  3. 特殊情况没特判:把最小数据、最大数据、答案恰好等于 0 的情况各测一遍。特别是边界输入,出题人最喜欢在这里设陷阱。

七、知识点拓展

这题虽然简单,但背后的方法可以推广,总结如下:

  • 本题考查分支结构的基本写法,这类题在考试中属于必得分项,要练到能默写。
  • 写完代码后建议自己造几组边界数据测试,特别是最小值和最大值。
  • 同一知识点在不同场次反复出现,把这道题的写法吃透,后面遇到同类题可以直接套用。

八、适用人群

如果你已经掌握分支结构的基本写法,这道题可以用来巩固手感。

这道题就讲到这里。我会持续更新各场次真题的详细拆解,需要系统复习的同学可以关注这个系列。有问题欢迎评论区讨论。

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

千年私服游戏地图二进制解析工具readmap深度解析

简介&#xff1a;本资源是一款面向游戏服务端开发者与怀旧网游技术研究者的「千年」MMORPG地图转换工具包&#xff0c;聚焦服务端地图数据解析与格式适配问题&#xff0c;适用于服务器运维、地图定制开发及经典游戏逆向分析等场景。压缩包共10个文件&#xff0c;含3个典型map地…

作者头像 李华
网站建设 2026/10/18 5:19:07

airllm:把大模型推理门槛降到普通电脑的轻量框架

先放下手里的显卡评测文章&#xff0c;聊聊这两天折腾出来的一个很有点意思的推理框架&#xff0c;名字叫 airllm。如果你手头只有一台普普通通的笔记本、迷你主机&#xff0c;或者哪怕是配置不算太夸张的安卓平板&#xff0c;却想跑一跑那些动辄几十亿参数的大语言模型&#x…

作者头像 李华
网站建设 2026/10/18 5:18:13

RT-DETR+CEM:雾天目标检测与多模态融合实践

雾天检测是个老问题&#xff0c;但大部分人做的是“前置去雾检测”或者“加个数据增强硬扛”。RT-DETR系列本身的实时性和端到端特性很适合落地&#xff0c;但直接在雾天数据上训练&#xff0c;特征提取阶段就会被低对比度和颜色偏移干扰&#xff0c;尤其一些小目标&#xff0c…

作者头像 李华
网站建设 2026/10/18 5:17:20

C语言静态二叉树建立:零堆内存的确定性建树方法

1. 为什么“静态建立”不是教科书里的配角&#xff0c;而是工程落地的第一道门槛在某高校《数据结构与算法》课程的实验课上&#xff0c;我辅导过几十位学生实现二叉树。几乎所有人打开教材&#xff0c;第一眼就跳向“链式存储动态malloc”&#xff0c;接着照着伪代码敲出struc…

作者头像 李华
网站建设 2026/10/18 5:11:22

Agent与LLM工程落地:从工具调用到推理优化的避坑指南

1. 今日视角&#xff1a;Agent 与 LLM 的技术风向标今天的日报围绕 Agent 与 LLM 两个核心关键词展开。先说结论&#xff1a;智能体&#xff08;Agent&#xff09;正在从“能聊天”走向“能干活”&#xff0c;而大语言模型&#xff08;LLM&#xff09;的竞争焦点则从“参数规模…

作者头像 李华