GESP C++ 三级是从“语法入门”走向“算法入门”的关键阶段。
按照 GESP 考纲,三级重点包括:数据编码、进制转换、位运算、一维数组、字符串及其函数、枚举法和模拟法。三级的目标不是学习复杂算法,而是能够把一个实际问题转化成清晰的数组、字符串、枚举或模拟程序。
一、一维数组与统计模拟
一维数组是三级最核心的内容之一。很多题看起来是生活场景,本质都是用数组记录状态、计数或最值。
1. 到达情况统计
B3842 [GESP202306 三级] 春游
题目给出 位同学和 次报到编号,有的同学可能多次报出编号,要求找出没有到达的同学。题目保证编号在 到 之间,。
教学重点:
用数组 vis[i]记录编号 是否出现;重复报到不能重复计算; 最后从小到大扫描所有编号; 如果没有缺席,输出 。
这题适合作为三级一维数组入门题。
2. 累加统计
B3867 [GESP202309 三级] 小杨的储蓄
第 天往编号为 的储蓄罐中存入 元,最后输出每个储蓄罐中的钱数。题目保证 。
教学重点:
数组下标从 开始; 第 天存入的是 元,而不是固定金额; 每次操作就是 sum[a[i]] += i;最后按编号顺序输出。
这题本质是“按编号分类累加”。
3. 最大最小值替换
B4066 [GESP202412 三级] 数字替换
题目给出序列 和整数 ,要求把所有大于 的数替换为原序列最大值,把所有小于 的数替换为原序列最小值。。
教学重点:
先扫描一遍求最大值和最小值; 再扫描一遍完成替换; 等于 的数字保持不变; 注意不能一边替换一边更新最大最小值。
这题非常适合训练“原始数据”和“处理后数据”的区别。
4. 每类取最小值
B4450 [GESP202512 三级] 小杨的智慧购物
商店中有 件文具,分成 类。每类至少有一件,要求每类只买最便宜的一件,求总花费。数据范围 。
教学重点:
用数组 mn[k]记录第 类文具当前最低价格;初始化为一个很大的数; 每读入一件文具就更新对应类别; 最后累加所有类别的最低价格。
这是三级中很典型的“分类最值统计”。
5. 操作过程模拟
B4413 [GESP202509 三级] 数组清零
每次找到数组中的最大值,如果最大值有多个选下标最大的;再找到所有非零数中的最小值,将最大值减去这个最小值。重复直到数组全为 ,求操作次数。,。
教学重点:
按题意模拟三步操作; 最大值相同选下标最大的; 最小值必须在非零数中找; 判断数组是否已经全为 。
这题虽然数据不大,但细节很多,适合训练学生严格按题意实现。
二、字符串处理与字符分类
三级字符串题的核心不是复杂算法,而是字符判断、分类统计、大小写转换、分隔和拼接。
1. 密码规则判断
B3843 [GESP202306 三级] 密码合规 B4449 [GESP202512 三级] 密码强度
密码合规 要求从一个逗号分隔的字符串中分离出多个密码,并判断长度、字符合法性、字符类别和特殊字符要求。
密码强度 要求判断密码是否长度至少为 ,且至少包含一个大写字母和一个数字。
教学重点:
isdigit、isupper、islower的使用;字符串长度判断; 多条件同时满足; 逗号分隔字符串的扫描; 只输出合规密码或输出 Y/N。
这两题非常适合放在同一个专题中讲。
2. 字母求值与大小写处理
B3956 [GESP202403 三级] 字母求和
小写字母表示它在字母表中的位置,例如 a=1,b=2;大写字母表示其 ASCII 码的相反数,例如 A=-65。要求求字符串对应整数和。。
教学重点:
小写字母: c - 'a' + 1;大写字母: -int(c);注意结果可能为负数; 字符与 ASCII 码之间的转换。
这题适合训练字符编码意识。
3. 单词统计
B4262 [GESP202503 三级] 词频统计
给出 个单词,忽略大小写,输出出现次数最多的单词,且保证最多的单词唯一。
教学重点:
把所有字母统一转成小写; 可以用数组、结构体数组或 map统计;三级教学中可以先讲“字符串数组 + 计数数组”的做法; 最后找出现次数最大的单词。
这题是三级字符串统计的代表题。
4. 单位转换文本模拟
B3926 [GESP202312 三级] 单位转换
题目输入形如 1 km = ? mm 的单位转换表达式,只涉及较大单位转较小单位,包括长度单位和重量单位。
教学重点:
按固定格式读入; 建立单位到倍率的映射; 输出时保留原格式,只替换 ?;注意 km、m、mm和kg、g、mg两套系统。
这题很适合训练“读入格式比较复杂,但逻辑不难”的题目。
5. 凯撒密码与字符循环
B4003 [GESP202406 三级] 移位 B4500 [GESP202603 三级] 凯撒密码
移位 要输出大写字母表在偏移量 下的结果,偏移量可能超过 。
凯撒密码 给出一组已知明文和密文,求偏移量,再破解另一段密文。所有字符串均由大写字母组成。
教学重点:
偏移量要对 取模; 加密是向后移,解密是向前移; 处理小于 'A'时要加回 ;字符循环可以写成: (c - 'A' + k) % 26 + 'A'。
这两题是三级字符模拟中的经典题型。
三、进制、二进制与位运算
三级考纲明确要求掌握进制转换、位运算和数据编码,所以这类题非常重要。
1. 进制判断
B3868 [GESP202309 三级] 进制判断
题目给出若干字符串,要求分别判断它是否可能是二进制、八进制、十进制、十六进制。字符串可能以 开头,只由数字和大写字母组成。
教学重点:
二进制只允许 0,1;八进制只允许 0~7;十进制只允许 0~9;十六进制允许 0~9,A~F;不能因为有前导零就判错。
这题是三级进制知识最标准的题。
2. 位运算性质
B4261 [GESP202503 三级] 2025
题目要求找最小正整数 ,使得:
其中 & 是按位与,| 是按位或。
关键性质是:
对于每一位, 和 的贡献之和其实等于 在该位上的普通加法贡献。
也就是说:
所以本题可以转化为:
再判断 是否为正整数。
教学重点:
按位与、按位或的意义; 可以从二进制每一位分析; 不要暴力枚举过大范围; 注意 必须是正整数。
3. 奇偶校验
B4358 [GESP202506 三级] 奇偶校验
给出若干个 的整数,统计它们二进制表示中 的总数量,并输出奇偶校验码。
教学重点:
用循环不断除以 统计二进制中 的个数; 或使用位运算 x & 1;校验码就是总个数对 取模; 注意题目还要求输出 的总数量。
这题非常适合作为位运算入门练习。
4. 二进制回文
B4499 [GESP202603 三级] 二进制回文串
把 到 的每个整数转成无前导零的二进制表示,统计二进制表示是回文串的数。数据范围 。
教学重点:
整数转二进制字符串; 判断字符串是否回文; 枚举 完全可以通过; 注意二进制表示不能有前导零。
这是“进制转换 + 字符串回文判断”的综合题。
四、枚举、数学判断与简单优化
三级枚举题一般不会要求复杂剪枝,但要求学生能根据数据范围判断暴力是否可行。
1. 完全平方数枚举
B3957 [GESP202403 三级] 完全平方数
给出 个非负整数,统计有多少对 满足 是完全平方数。,。
教学重点:
双重循环枚举所有数对; 判断一个数是否为完全平方数; 可以用 sqrt后再平方验证;注意只统计 $i
这题是三级枚举法的代表题。
2. 倍数判断
B4004 [GESP202406 三级] 寻找倍数
题目要求判断序列中是否存在某个数 ,使它是序列中所有数的倍数。数据范围 ,。
教学重点:
候选数一定是序列最大值; 只需要判断最大值是否能被所有数整除; 多组测试数据; 不要枚举每个数再检查所有数。
这题适合训练学生从“存在某个数”中找到关键候选。
3. 平衡序列
B4038 [GESP202409 三级] 平衡序列
题目要求判断是否存在一个分割点 ,使得前 个数的和等于后面所有数的和。
教学重点:
先求总和; 从左到右维护前缀和; 判断 left == total - left;分割点必须满足 。
这题可以作为“前缀和思想”的启蒙题,虽然三级不一定正式讲前缀和数组,但可以先讲滚动维护。
4. 小猫分鱼
B3925 [GESP202312 三级] 小猫分鱼
题目来自经典“分鱼问题”:多只小猫依次分鱼,每次都多出固定数量的鱼,要求反推最少初始鱼数。
教学重点:
可以从最后一只小猫开始反推; 每一步要保证反推出来是整数; 数据较小可以枚举答案; 更好的做法是枚举最后一次可分配的数量,再向前还原。
这题对三级学生来说属于偏思维题,适合放在提高训练。
五、回文与字符串枚举
1. 回文拼接
B4039 [GESP202409 三级] 回文拼接
给出若干只包含小写字母的字符串,判断每个字符串是否能由两个长度至少为 的回文串拼接而成。每个字符串长度不超过 。
教学重点:
枚举切分位置; 左右两段长度都至少为 ; 分别判断左右两段是否为回文; 数据范围小,直接暴力判断即可。
这是三级字符串枚举中非常好的训练题。
六、格式输出与图形模拟
三级有一类题非常考验输出格式,学生容易因为空格、换行、对齐问题失分。
1. 打印数字
B4067 [GESP202412 三级] 打印数字
题目给出数字 的 图案表示,要求把给定数字转换为对应图形。输入的 只由数字 组成。
教学重点:
预存每个数字的 行图案; 按行输出,而不是按数字逐个完整输出; 多个数字横向拼接; 注意行与行之间的换行。
这题非常适合训练“二维字符串模板”。
2. 日历制作
B4414 [GESP202509 三级] 日历制作
题目要求输出 年某个月的日历,并按照指定格式对齐日期。
教学重点:
预处理每个月天数; 预处理每个月第一天是星期几; 控制宽度和空格; 每七天换行; 输出格式要严格。
这题不是算法难,而是实现细节难,适合放在模拟专题后半部分。
七、简单贪心与递推模拟
三级中也会出现少量带有贪心或递推味道的题,但通常不需要正式证明,只要能发现局部最优即可。
1. 分糖果
B4359 [GESP202506 三级] 分糖果
有 位小朋友排队,第 位至少要 颗糖,并且必须比前一位小朋友更多,求最少总糖果数。
教学重点:
第一个小朋友至少拿 ; 后一个小朋友至少是 max(a[i], 上一个 + 1);每一步都取最小可行值; 最后累加答案。
这题可以作为三级贪心思想的启蒙题。
按难度梯度整理
第一梯度:三级基础题
适合刚进入三级的学生。
这一阶段的目标是:
让学生熟练掌握一维数组、字符处理和基础模拟。
第二梯度:三级核心题
适合系统训练三级常见模型。
这一阶段基本覆盖三级考试的主力题型。
第三梯度:三级提高题
适合冲刺高分和训练细节稳定性。
这一阶段的题目不一定算法更高级,但更考验学生的实现能力、边界意识和格式控制。
三级备考建议
三级训练建议按下面顺序进行:
先练一维数组:春游、小杨的储蓄、数字替换、智慧购物; 再练字符串:密码强度、密码合规、词频统计、凯撒密码; 接着练进制与二进制:进制判断、奇偶校验、二进制回文串; 最后练枚举与综合模拟:完全平方数、回文拼接、小猫分鱼、日历制作。
三级最容易出错的地方主要是:
数组下标从 开始还是从 开始; 字符和数字互相转换; 大小写字母判断; 字符串分割; 输出格式中的空格和换行; 对数据范围没有概念,乱用过慢或过复杂的做法。
三级的核心不是“学难算法”,而是把 数组、字符串、枚举、模拟、进制、位运算 这些基础能力练稳。