GESP C++ 三级真题分类整理:从数组字符串到枚举模拟

四季读书网 1 0
GESP C++ 三级真题分类整理:从数组字符串到枚举模拟

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 三级] 密码强度

密码合规 要求从一个逗号分隔的字符串中分离出多个密码,并判断长度、字符合法性、字符类别和特殊字符要求。

密码强度 要求判断密码是否长度至少为 ,且至少包含一个大写字母和一个数字。

教学重点:

  • isdigitisupperislower 的使用;
  • 字符串长度判断;
  • 多条件同时满足;
  • 逗号分隔字符串的扫描;
  • 只输出合规密码或输出 Y/N

这两题非常适合放在同一个专题中讲。

2. 字母求值与大小写处理

  • B3956 [GESP202403 三级] 字母求和

小写字母表示它在字母表中的位置,例如 a=1b=2;大写字母表示其 ASCII 码的相反数,例如 A=-65。要求求字符串对应整数和。

教学重点:

  • 小写字母:c - 'a' + 1
  • 大写字母:-int(c)
  • 注意结果可能为负数;
  • 字符与 ASCII 码之间的转换。

这题适合训练字符编码意识。

3. 单词统计

  • B4262 [GESP202503 三级] 词频统计

给出  个单词,忽略大小写,输出出现次数最多的单词,且保证最多的单词唯一。

教学重点:

  • 把所有字母统一转成小写;
  • 可以用数组、结构体数组或 map 统计;
  • 三级教学中可以先讲“字符串数组 + 计数数组”的做法;
  • 最后找出现次数最大的单词。

这题是三级字符串统计的代表题。

4. 单位转换文本模拟

  • B3926 [GESP202312 三级] 单位转换

题目输入形如 1 km = ? mm 的单位转换表达式,只涉及较大单位转较小单位,包括长度单位和重量单位。

教学重点:

  • 按固定格式读入;
  • 建立单位到倍率的映射;
  • 输出时保留原格式,只替换 ?
  • 注意 kmmmm 和 kggmg 两套系统。

这题很适合训练“读入格式比较复杂,但逻辑不难”的题目。

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)
  • 每一步都取最小可行值;
  • 最后累加答案。

这题可以作为三级贪心思想的启蒙题。

按难度梯度整理

第一梯度:三级基础题

适合刚进入三级的学生。

题目
主要考点
B3842 春游
一维数组、出现标记
B3867 小杨的储蓄
数组累加统计
B3956 字母求和
字符判断、ASCII
B4003 移位
字符循环、取模
B4066 数字替换
最大值、最小值、数组扫描
B4449 密码强度
字符分类、条件判断
B4450 小杨的智慧购物
分类最小值统计

这一阶段的目标是:

让学生熟练掌握一维数组、字符处理和基础模拟。

第二梯度:三级核心题

适合系统训练三级常见模型。

题目
主要考点
B3843 密码合规
字符串分割、规则判断
B3868 进制判断
进制字符合法性
B3926 单位转换
固定格式读入、单位换算
B3957 完全平方数
双重枚举、平方数判断
B4004 寻找倍数
最大值、整除判断
B4038 平衡序列
总和、前缀和思想
B4039 回文拼接
枚举切点、回文判断
B4262 词频统计
大小写转换、计数
B4358 奇偶校验
二进制、统计  的个数
B4359 分糖果
简单贪心、递推

这一阶段基本覆盖三级考试的主力题型。

第三梯度:三级提高题

适合冲刺高分和训练细节稳定性。

题目
主要考点
B3925 小猫分鱼
反推、枚举、数学模拟
B4067 打印数字
图形模板、格式输出
B4261 2025
位运算性质
B4413 数组清零
按题意复杂模拟
B4414 日历制作
日期模拟、格式控制
B4499 二进制回文串
二进制转换、回文判断
B4500 凯撒密码
偏移量推断、字符串解密

这一阶段的题目不一定算法更高级,但更考验学生的实现能力、边界意识和格式控制。

三级备考建议

三级训练建议按下面顺序进行:

  1. 先练一维数组:春游、小杨的储蓄、数字替换、智慧购物;
  2. 再练字符串:密码强度、密码合规、词频统计、凯撒密码;
  3. 接着练进制与二进制:进制判断、奇偶校验、二进制回文串;
  4. 最后练枚举与综合模拟:完全平方数、回文拼接、小猫分鱼、日历制作。

三级最容易出错的地方主要是:

  • 数组下标从  开始还是从  开始;
  • 字符和数字互相转换;
  • 大小写字母判断;
  • 字符串分割;
  • 输出格式中的空格和换行;
  • 对数据范围没有概念,乱用过慢或过复杂的做法。

三级的核心不是“学难算法”,而是把 数组、字符串、枚举、模拟、进制、位运算 这些基础能力练稳。

抱歉,评论功能暂时关闭!