导语
很多孩子二级失分,不是因为「不会」,而是因为看不出这题属于哪一类模板。一旦模板识别慢半拍,就会出现两类问题:
- 写得出来,但写得慢;
- 思路对了,细节容易翻车。
这篇把二级最常用模板收成一套「能背、能练、能复盘」的工具包。你不需要一次全吃下,先从高频 4 条开始就够。
一、先看总表:二级 9 个高频模板
家长实用建议:先练 T-01 / T-05 / T-03 / T-04,这四条覆盖面最大。
二、四条最高频模板(先练这四条)
T-01 数位拆解(while)
触发词:个位、十位、数位和、是否包含某数字。核心写法:
int x = n;// 先备份while(x >0){int d = x %10;// 处理 dx /=10;}
最常错:忘记备份原值、漏写 x/=10。
T-05 双层枚举计数(for-for)
触发词:枚举两个量、统计满足条件的组合。核心写法:
int ans =0;for(int i = L; i <= R; i++){for(int j = A; j <= B; j++){if(条件成立) ans++;}}
最常错:没先写清「i/j 各在枚举谁」,条件混乱。
T-03 素数判断
触发词:质数、素数个数、是否可被整除。核心写法(到 i*i<=n):
bool isPrime(int n){if(n <2)returnfalse;for(int i =2; i * i <= n; i++){if(n % i ==0)returnfalse;}returntrue;}
最常错:循环上界写太大,或找到因子后不 break/return。
T-04 完全平方数判断
触发词:平方数、平方和、开根判断。核心写法:
int y =(int)sqrt((double)x);bool ok =(y * y == x);
最常错:直接比较浮点 sqrt(x),导致精度误判。
三、补全其余五条模板
T-02 逆序数
触发词:逆序、反转数字、回文数判断、数字倒过来是否相等。核心写法:
int x = n;int rev =0;while(x >0){rev = rev *10+ x %10;x /=10;}// rev 即为 n 的逆序数// 判断回文数:if (rev == n)
最常错:
- 忘记备份原值就拿 n 直接拆,最后无法与 rev 比较;
- 末尾有 0 的数(如 120)逆序后会丢位(rev=021=21),需要提前判断 n%10 是否为 0。
训练建议:先写出 n=1221 的手算过程(rev 每步的值),再对照代码走一遍,确认逻辑一致再提交。
T-06 图案输出(双层循环)
触发词:输出三角形、菱形、矩形、N 形、H 形、星号图案。核心写法(以直角三角形为例):
int n;cin >> n;for(int i =1; i <= n; i++){// 控制行for(int j =1; j <= i; j++){// 控制列cout <<"*";}cout <<"\n";}
常见变体对照:
最常错:
- 空格数和星号数的关系算错(建议先手画出第1、2、3行,找规律再写代码);
- 行末多了一个空格导致输出不对。
训练建议:遇到新图案,先用纸画出 n=4 的样子,标出每行的空格数和星号数,找出与 i 的关系式,再写代码。
T-07 取余周期编号
触发词:循环报数、第 n 个是什么、周期为 k 的规律、星期几、座位编号。核心写法:
// 周期为 k,编号从 1 开始int pos = n % k;if(pos ==0) pos = k;// 整除时对应最后一个// pos 即为第 n 个元素在周期内的编号(1~k)// 若编号从 0 开始更简单:int pos0 =(n -1)% k;// 结果为 0~k-1
举例:7 个同学循环报数,第 22 个轮到谁?22%7=1,第 1 个同学。(若结果为 0 则是第 7 个)
最常错:
- 没有处理整除的情况,余数为 0 时直接输出 0,应输出 k;
- 题目编号从 0 开始还是从 1 开始没有看清,导致差 1。
训练建议:先手算 n=k、n=k+1、n=2k 三个边界值,确认代码结果正确再提交。
T-08 幂次枚举
触发词:2 的幂、完全平方数的幂次形式、判断是否为某数的幂、枚举所有满足条件的幂次。核心写法:
// 枚举所有 base^exp <= n 的值longlong val =1;int base =2;while(val <= n){// 处理 val(当前幂次值)val *= base;}// 判断 x 是否为 2 的幂(位运算写法)bool isPow2 =(x >0)&&(x &(x -1))==0;// 判断 x 是否为某个整数的完全平方(见 T-04)
最常错:
val用int存储,幂次增长很快,超过 2³¹ 溢出——应用longlong;- 循环终止条件用
<还是<=没看清题目(是否包含 n 本身)。
训练建议:碰到幂次类题目先估算上界:2³⁰ ≈ 10⁹,如果题目数据范围到 10⁹ 就用 longlong,循环最多跑约 30 次,不用担心超时。
T-09 数位提取(静态取位)
触发词:选择/填空题中出现取某一位的代码,如 n/10%10、 n%100/10,问结果是什么。核心规则:
个位:n %10十位:n /10%10百位:n /100%10千位:n /1000%10第 k 位(从右往左,k 从0开始):n / pow(10, k)%10
读代码技巧:遇到 n/X%Y 的形式,先算 /X(去掉低位),再算 %Y(只保留最低位),结果就是对应数位。
举例: n=4567
n%10=7(个位)n/10%10=6(十位)n/100%10=5(百位)n/1000%10=4(千位)
最常错:
- 把
/和%的顺序搞反——n%10/10永远等于 0(个位除以 10 必然为 0); - 题目给的是字符串形式的数字(如
strings="4567"),此时用s[i]-'0'取位,不用除法。
训练建议:选择题遇到此类代码,直接代入一个具体数字(如 1234)手算,不要硬背公式。
四、模板怎么用:三步而不是死记
很多孩子模板背了,但不会落地。关键在三步顺序:
- 先识别题型:这题更像哪条模板?
- 再抄骨架:先把模板主体写出来。
- 最后填条件:把题目规则翻成
if。
一句话:先有框,再填肉。
五、家长陪练脚本(不懂代码也能用)
可以固定问三句:
- 「这题你先用哪条模板?」
- 「这条模板最容易错的点你准备怎么防?」
- 「如果样例过了,你还要补测什么边界?」
这比一句「你再认真点」更有效。
六、考前 7 天模板回炉计划
- 第 1-2 天:T-01 + T-05(覆盖面最大)
- 第 3 天:T-03 + T-04(判断类高频)
- 第 4 天:T-06(图案输出专项)
- 第 5 天:T-07 + T-09(选择填空易错)
- 第 6 天:T-08 + T-02 + 复盘错题
- 第 7 天:混合小测,强制先报模板再写代码
目标不是刷很多新题,而是把模板识别速度提上来。
小结
- 二级题目看着散,模板并不散。
- 先练高频四条,再补其余五条,效率最高。
- 模板库真正的价值,不是「背代码」,而是让孩子看到题先有方向。
夜雨聆风