GESP C++ 二级是从“能写简单程序”走向“能写综合循环程序”的阶段。
按照 GESP 考纲,二级重点包括:计算机存储与网络、程序设计语言特点、流程图、ASCII 编码、数据类型转换、多层分支、多层循环、常用数学函数等内容。二级目标是让学生能够独立完成包含分支语句、循环语句、嵌套结构和简单数学函数的综合程序。
一、多层循环枚举
多层循环是二级最核心的内容之一。很多题目本质上不需要复杂算法,只要根据范围合理枚举即可。
1. 百鸡问题
B3836 [GESP202303 二级] 百鸡问题
这是一道非常经典的枚举题。
题目给出公鸡、母鸡、小鸡的价格,以及总钱数和总只数,要求统计购买方案数量。数据范围较小,直接枚举公鸡数量和母鸡数量,再计算小鸡数量即可。
教学重点:
枚举公鸡数量; 枚举母鸡数量; 小鸡数量由总只数推出; 判断总价格是否满足; 注意“小鸡每 只 元”的整除条件。
这题非常适合作为二级“二重循环枚举”的入门题。
2. 找素数
B3840 [GESP202306 二级] 找素数
题目要求统计区间 中有多少个素数,范围 ,直接对每个数试除判断即可。
教学重点:
素数定义:大于 ,且除了 和自身外没有其他因数; 判断 是否为素数时,只需要枚举 到 ; 外层枚举区间中的每个数; 内层判断这个数是不是素数。
这题是二级中最典型的“数学概念 + 循环判断”。
3. 平方之和
B4002 [GESP202406 二级] 平方之和
题目要求判断一个正整数 是否可以写成两个正整数平方和:
由于 ,可以枚举 和 ,也可以枚举 后判断剩余部分是否为完全平方数。
教学重点:
正整数 ,不能为 ; 枚举范围可以控制在 以内; 判断完全平方数时,可以用 sqrt后再平方验证;多组数据要逐个输出 Yes或No。
这题适合训练学生使用平方根函数和枚举优化。
4. 数三角形
B4356 [GESP202506 二级] 数三角形
题目给出最大直角边长 ,要求统计直角边 均不超过 ,且面积为整数的不同直角三角形数量。面积为:
所以只需要判断 是否为偶数。两个直角边交换后视为同一种三角形,因此可以枚举 。
教学重点:
枚举 ; 枚举 ,并让 避免重复; 判断 是否为偶数; 理解“相同三角形”的定义。
这题是二级枚举题中比较好的思维训练题。
二、数位处理与数字模拟
二级真题中,数位处理出现频率很高。学生必须熟练掌握 %10 取个位、/10 去个位,以及循环拆分整数。
1. 自幂数判断
B3841 [GESP202306 二级] 自幂数判断
自幂数是指一个 位数,各位数字的 次方之和等于它本身。例如 满足:
题目要求判断多个数是否为自幂数。
教学重点:
先求数字位数; 再逐位拆分; 每一位求 次方; 最后判断总和是否等于原数; 原数要保留,不能在拆位过程中丢失。
这题是二级数位处理中的核心题。
2. 数字黑洞
B3866 [GESP202309 二级] 数字黑洞
题目给出一个符合要求的三位数,每次将三个数字重新排列成最大数和最小数,用最大数减去最小数,重复直到得到 ,输出变换次数。
教学重点:
拆出百位、十位、个位; 对三个数字排序; 组成最大三位数和最小三位数; 重复模拟直到得到 ; 注意中间结果可能有 ,例如 这种情况要按三位数处理。
这题非常适合训练“按题意重复模拟”。
3. 数位之和与数位和最大值
B4036 [GESP202409 二级] 数位之和 B4065 [GESP202412 二级] 数位和
B4036 要判断一个数的各位数字和是否为 的倍数。
B4065 要求在多个正整数中,找出数位和的最大值,数字最大可达 ,所以建议使用 long long。(洛谷)
教学重点:
写一个函数求数位和; 注意 while(x > 0)的写法;多组数据逐个处理; 不能用 int保存。
这两题可以放在一起讲,是二级数位专题的基础题。
4. 计数数字出现次数
B4007 [GESP202406 二级] 计数 B4497 [GESP202603 二级] 数数
B4007 要统计从 到 的所有整数中,数字 出现了多少次,其中 。
B4497 要统计区间 中,恰好包含 个数字 2 的正整数个数,其中 。
教学重点:
枚举每个整数; 对每个整数逐位统计某个数字出现次数; B4007 统计总出现次数; B4497 判断是否恰好出现 次; 注意 的处理,不过题目范围从正整数开始。
这一组题适合训练“枚举数字 + 数位统计”。
5. 优美的数字
B4411 [GESP202509 二级] 优美的数字
题目定义:一个正整数在十进制下所有数位都相同,则称为优美数字。要求统计不超过 的优美正整数数量,。
教学重点:
可以枚举 到 ; 拆位判断所有数位是否相同; 也可以生成 ; 对二级学生来说,直接枚举更稳。
这题本质还是数位处理,但判断条件更偏“数位性质”。
三、图形输出与字符矩阵
二级考试非常喜欢图形输出题。这类题不难,但很容易因为空格、换行、字符位置出错。
1. 三角形输出
B3837 [GESP202303 二级] 画三角形
题目要求输出一个由大写字母组成的三角形,第 行 个字母,第 行 个字母,以此类推,并且字母从 A 到 Z 循环使用。
教学重点:
外层循环控制行; 内层循环控制每行字符个数; 字母超过 Z后回到A;每行末尾不能有多余空格。
这题适合作为二级图形输出入门题。
2. 字母矩阵系列
B3865 [GESP202309 二级] 小杨的 X 字矩阵 B3924 [GESP202312 二级] 小杨的 H 字矩阵 B3955 [GESP202403 二级] 小杨的日字矩阵 B4037 [GESP202409 二级] 小杨的 N 字矩阵
这四题本质都是:给定一个奇数 ,按照某些位置规则输出特殊字符,其余位置输出填充字符。题目分别要求打印 X 字、H 字、日字、N 字矩阵。
教学重点:
外层循环枚举行; 内层循环枚举列; 根据 的位置判断输出什么字符; 对角线条件: 主对角线: i == j;副对角线: i + j == n + 1;中间行: i == (n + 1) / 2;第一列、最后一列: j == 1 || j == n。
这类题最适合训练二级学生的“坐标意识”。
3. 菱形与正方形
B4412 [GESP202509 二级] 菱形 B4498 [GESP202603 二级] 画画
B4412 要在 的字符画中画出一个菱形,顶点和边界使用 #,其余位置使用 .。
B4498 要绘制一个正方形边框,四个顶点为 +,上下边为 -,左右边为 |,内部为 *。
教学重点:
菱形可以用“到中心点的距离”判断; 正方形要区分顶点、边界和内部; 输出每行长度必须相同; 不要输出多余空格。
这一组题可以作为图形输出专题的提高练习。
4. 等差矩阵
B4259 [GESP202503 二级] 等差矩阵
题目要求输出 行 列矩阵,第 行第 列填入 。每一行、每一列都是等差数列。
教学重点:
双重循环输出矩阵; 行列从 开始计算; 每行数字之间用空格隔开; 行末空格通常可以不严格,但建议训练规范输出。
这是二级矩阵输出中最基础的一类。
四、简单数学判断与数学函数
二级考纲明确要求常用数学函数,如绝对值函数、平方根函数、最大值函数、最小值函数等。真题中也经常出现平方、平方根、幂和整除判断。
1. 寻找数字
B4064 [GESP202412 二级] 寻找数字
题目给出正整数 ,要求判断是否存在正整数 满足:
如果存在输出 ,否则输出 。数据组数可达 ,。
教学重点:
可以从 枚举到 ,因为 ; 判断 是否等于 ; 多组数据需要快速处理; 注意乘法过程中使用 long long更稳。
这题适合训练“根据数据范围确定枚举上界”。
2. 幂和数
B4357 [GESP202506 二级] 幂和数
如果一个数 可以表示为两个 的次幂之和:
则称为幂和数。题目要求统计区间 中有多少个幂和数,。
教学重点:
先生成所有 ; 双重枚举两个幂; 标记所有能表示成两个 的次幂之和的数; 最后统计区间内有多少个被标记。
这题有一点“预处理”的味道,但仍然属于二级可接受范围。
3. 黄金格
B4448 [GESP202512 二级] 黄金格
题目给出 ,要求统计满足:
的格子数量。 均不超过 。
教学重点:
双重循环枚举每个格子; 可以使用 sqrt;更稳的写法是两边都非负时平方比较; 注意行列编号从 开始。
这题是二级中比较典型的“数学表达式翻译成程序”的题。
4. 乘法问题
B3954 [GESP202403 二级] 乘法问题
题目要求把若干个正整数相乘,如果乘积超过 ,就输出 >1000000,否则输出乘积。
教学重点:
循环读入并累乘; 一旦超过 可以提前标记; 注意输出格式是固定字符串; 乘积可能快速变大,建议使用 long long。
这题适合训练“边计算边判断上限”。
五、日期时间与过程模拟
1. 时间跨越
B4260 [GESP202503 二级] 时间跨越
题目给出当前年月日时和 小时之后,要求计算新的年月日时。,但仍然可能跨日、跨月、跨年,需要判断闰年。
教学重点:
先让小时加上 ; 如果小时超过 ,日期加一; 日期超过当月天数,月份加一; 月份超过 ,年份加一; 二月天数要根据闰年判断。
这是二级中非常好的“分支 + 模拟 + 边界”题。
2. 环保能量球
B4447 [GESP202512 二级] 环保能量球
题目给出行走距离 和奖励间隔 ,基础能量为 ,每走满 公里额外奖励 点,所以答案是:
题目有多组数据。
教学重点:
理解整除含义; 多组数据循环处理; 不要逐公里模拟; 输出每组数据的答案。
这题虽然简单,但很适合训练学生从题意中提炼公式。
六、递推与简单序列模拟
1. 小杨做题
B3923 [GESP202312 二级] 小杨做题
第 天做 题,第 天做 题,从第 天开始每天做前两天题数之和。如果某一天做题数大于等于 ,后续就不再做题。要求第 天结束后总共做了多少题。
教学重点:
类似斐波那契递推; 要累计总题数; 达到停止条件后后面天数不再增加; 注意停止发生在“当天做完之后”。
这题是二级中非常适合引入“递推思想”的题。
按难度梯度整理
第一梯度:二级基础题
适合刚学完一级、开始进入二级的学生。
这一阶段的目标是:
熟练掌握二级最基本的循环、分支、输出格式和数位拆分。
第二梯度:二级核心题
适合系统训练二级常见模型。
这一阶段基本覆盖二级考试中最常见的数学与模拟题型。
第三梯度:二级图形专题
图形输出是二级必须单独练的一类题。
这一阶段重点训练:
坐标 判断; 主对角线、副对角线; 中间行、中间列; 边界位置; 输出格式完全一致。
第四梯度:二级提高题
适合冲刺满分和训练边界细节。
这些题虽然仍然属于二级范围,但对学生的题意理解、分类讨论和边界处理要求更高。
二级备考建议
二级训练建议按下面顺序进行:
先练基础循环和输出:等差矩阵、画三角形、画画; 再练数位处理:数位之和、数位和、计数、数数; 接着练数学判断:找素数、平方之和、自幂数判断、寻找数字; 最后练综合模拟:数字黑洞、小杨做题、时间跨越、黄金格。
二级最容易出错的地方主要是:
忘记初始化计数器; 内外层循环变量写混; 字符图案多输出空格; 数位拆分时破坏原数; 三位数处理中没有保留前导零意义; 日期题没有处理闰年和月底; 使用 int时忽略较大的数字范围;输出格式与题目要求不完全一致。
二级的核心不是难算法,而是把 多层循环、分支判断、数位拆分、图形输出、简单数学函数 练到非常稳定。