初赛专题(九):阅读程序方法论 —— 三武器、陷阱五件套与三段配方

本讲定位:阅读程序三段约 40 分,是全卷分值最大的板块。它不是新知识点,而是把前面各讲的能力合流成一套考场方法:第 01 讲的三武器(列变量表、找不变量、均摊计数)、第 02 讲的补码与溢出、第 03 讲的位运算、第 08 讲的复杂度、第 11 讲的数论程序、第 12 讲的调用树——本讲把它们组织成”三武器 + 陷阱五件套 + 三段配方”的作战体系,按七年真题(见 cspj-exam-analysis-2019-2025.md)逐类实战。

前置知识:第 01、02、03、08、11、12 讲。本讲是这些讲的”合流点”,哪讲不熟就回哪讲补。

课时:建议 2 次课。上半:三武器 + 五件套(第 1~4 节);下半:按三段配方实战(第 5~7 节)+ 考场流程。

适合对象:CSP-J 初赛。标注 ⭐ 的小节为进阶内容,第一遍学习可以跳过。


1. 考情与总策略:40 分怎么拿

1.1 题型与配方

每年 3 段程序,每段配判断题(1.5 分/题)+ 选择题(3 分/题),合计约 40 分。近年三段的题材是高度固定的配方

段位 常驻题材 真题依据
数论/数学段 质数、约数、gcd、平方根、模运算 2021/2023/2024/2025,七年从未缺席
DP/递推段 爬楼梯、LCS、编辑距离、扔鸡蛋 2022–2025 连续四年
轮换段 位运算(2021/2022)、贪心+STL(2025)、字符串(2019/2020/2023) 三选一轮换

对 2026 的预测(详见真题分析 5.3 节):数论段概率 ~90%,DP 段 ~85%,第三段押位运算回归。本讲第 5、6 节就按前两个配方各实战一段,位运算段第 7 节单独交代。

1.2 三条考场心法

  1. 得分不需要”悟出程序含义”。 大多数小题问的是”输入 X 输出什么”“会不会越界”“复杂度多少”——这些全部可以用机械化的动作(模拟、列表、查陷阱)得到答案。先机械做题,行有余力再悟含义;悟不出来不耽误拿分。
  2. 判断题按题给分、无倒扣,机考可回改。 没把握也必须填,五五开也是期望 0.75 分/题。
  3. 判断题先归类再作答。 七年真题的判断题陷阱翻来覆去只有五类(第 3 节的”五件套”)。拿到判断题先问”它想考五件套里的哪一件”,命中归类,答案基本就出来了。

2. 三武器系统化

第 01 讲初次亮相的三招,这里升级成标准操作规程。

2.1 武器一:列变量表逐步模拟

适用:问”输入 X,输出什么”的题。格式:一列一个变量,一行一轮循环,循环体每执行完一遍填一行。

#include<iostream>
using namespace std;

int main() {
    int n, r = 0;
    cin >> n;
    while (n > 0) {
        r = r * 10 + n % 10;
        n /= 10;
    }
    cout << r << endl;
    return 0;
}

输入 1234,列表:

轮次 本轮取出 n % 10 r n(本轮结束时)
初始 0 1234
1 4 4 123
2 3 43 12
3 2 432 1
4 1 4321 0