ARTICLE · 1049566
2026 CSP-J 真题出炉:我们的 8 套模拟卷,覆盖了 97.7% 的考点
43 个作答点,42 个命中;11 处"同型题"级命中;5 段真题程序,算法模型全部练过。
全文含 8 组真题 vs 模拟卷代码对照,建议先收藏,再慢慢看。
2026 年 9 月 19 日 11:30,CSP-J 初赛交卷。
过去两天,我们把真题卷和 8 套模拟卷放在一起,做了一次"逐行代码级"的比对:把真题的 43 个作答点(15 道单选 + 18 道阅读小题 + 10 个完善程序空)逐点拆开,再回到 8 套卷的 344 个作答点里逐一检索。
这篇文章是完整版。比结论更重要的,是结论是怎么来的。
导读:
第一部分:总成绩单(30 秒看完)
第二部分:阅读程序逐题拆解(全文核心,6 组代码对照)
第三部分:完善程序逐题拆解(含代码对照)
第四部分:单选题"撞脸"清单
第五部分:成绩单背后的"工程级"组卷流程
第六部分:说句大实话——唯一的遗憾

下面逐段拆给你看。先看分值最重的阅读程序(40 分)。
2.1 真题阅读程序① —— 一个"看着简单、后劲十足"的循环
真题原文(节选):

这段十余行的代码,配了 6 个小题:输出模拟、改码判断、性质判断、死循环分析、输出模拟、计数。
它真正的"题眼"有三个:
n / 2 每次剥掉二进制最低位——第二个输出 y 统计的其实是 n 的二进制表示里"1"的个数(popcount);
19 题考"把 while (n > 0) 改成 while (n >= 0) 会怎样"——0 / 2 还是 0,死循环;
21 题考"y 恰好为 2 的输入有多少个"——一道计数题(即二进制里只有一个 1 的 2 的幂,共 31 个)。
看我们的第一套 · 阅读程序 18:

同样是"每次取最低位、再整体右移"的位统计骨架。第一套把它配成"统计 1 的个数 + 冒泡排序"的综合题,训练的就是这类循环的手算跟踪能力
再看第五套 · 阅读程序 16(奇偶分支递推):

"奇偶分支 + 递推过程跟踪"的配方,与真题这一段如出一辙——奇数走一条路、偶数走另一条路,然后再数每个分支执行了多少次。
至于那几个"刁钻小题"的套路,也全是练过的:
"死循环分析":
第四套 · 阅读 17 选 5:把归并的 mid 改成上取整,长度 2 的区间自我递归、规模不缩小——死递归;
第八套 · 阅读 16 选 6:虚拟机指令"跳转指向自己"——自环死循环;
"计数型较难小题":
第一套 · 阅读 17 判 4:数 dfs 被调用的总次数;
第二套 · 阅读 17 判 4:数递归函数的调用次数(分层展开,答错了还得重新数)。
一句话:真题这段代码"考什么、怎么坑",8 套卷都提前踩过一遍。
2.2 真题阅读程序② —— 高精度加法,连进位链都是同一个模型
真题原文(核心部分):

第五套 · 阅读程序 18:

逆序存位、逐位相加、进位链、长度与首位处理——同一个程序模型。
更有意思的是:两题的"题眼"恰好形成互补——
真题把输出长度固定为 max(位数)+1,于是 123 + 456 输出的是带前导零的 0579。题目一口气考了 4 个"前导零类"问题:输出 0579 对不对(22 题)、输入无前导零时输出是否也无前导零(23 题)、输出长度与首字符(27 题)、去掉进位后结果是否变小(24 题);
第五套写的是"有进位才加长",0 + 0 输出 0 而不是 00,练的是"什么时候该补位、什么时候不该补"。
同一个知识的两个面,都练到了。 所以学生上考场遇到"0579 这样的输出对不对、前导零哪里来"时,是带着"抗体"去的。
顺带一提:真题 26 题"把 if (c[i]>=10) 改成 if (c[i]>10) 后输出什么"——这种"改一个等号,问输出"的题,正是一套套卷子里最重点训练的"改码问后果"题型。
2.3 真题阅读程序③ —— 质数判定 + 递归搜索,拆开每个零件都练过
真题原文(核心):

这段程序输出的是"超级质数"——每一位前缀都是质数的数(如 2 → 23 → 239 这条链)。它由两个典型零件拼成,而这两个零件,8 套卷里各自都有完整训练:
零件一:质数判定。 我们的第三套 · 阅读程序 18(埃氏筛):

第四套 · 阅读程序 18(试除法分解质因数):

注意第四套的循环条件 i * i <= m——与真题 check_prime 里的 i * i <= x 是同一个手筋。
零件二:递归枚举搜索。 第八套 · 阅读程序 17(组合生成 DFS):

第二套 · 阅读程序 17(全排列 DFS):

"先判边界 → 打印 / 返回 → for 循环枚举下一位 → 递归"——这和真题的 search_result(x * 10 + i) 是同一套递归模板:换的只是"扩展一位"的方式(选下一个数 vs 拼接下一个数位)。
最妙的对照在小题上:
真题 30 题:"若 n 大于 10,把 for (int i=0;i<=9;i++) 改成 for (int i=1;i<=9;i+=2),输出是否一定不变?"
第八套 · 阅读 17 判 4:"若把 dfs(dep + 1, i + 1) 改为 dfs(dep + 1, i),输出行数是否仍是 6 行?"
改的是循环参数、问的是输出变化——同一个设问套路,学生练过。

3.1 真题完善程序① —— 进制转换(数组逐位运算)
真题原文(含空位):

这题考的是"数组模拟进制转换":逐位乘基数、满 n 进位、最后去掉前导零。
这套动作,8 套卷里反复练过:
第一套 · 阅读程序 16(十六进制字符数组操作,节选)

同样是对"数位数组"逐位做乘 / 加 / 取模运算,连"取模归位"的写法都一致。
再加上第六套 · 选 13(数制转换)、第一套 · 选 1、第二套 · 选 1(多进制换算)打底——进制转换这个专题,八套卷从概念到代码全链路覆盖。
3.2 真题完善程序② —— 递归枚举分割 + 十六进制字符 + 浮点输出
真题原文(含空位):

这道题是"递归枚举所有分割方案",考三个点:十六进制字符转数值、枚举边界、浮点精度。三个点,全部练过:
对照 1:十六进制字符转数值(①空)
真题选项:c <= '9' ? c - '0' : c - 'A' + 10
第一套 · 阅读程序 16:

一个三目运算符、一个 if-else,判断逻辑逐字相同。这个 - 'A' + 10 的偏移写法是十六进制处理的"手筋",练过第一套的同学,这个空基本是送分。
对照 2:递归枚举所有方案(②③⑤空)
第二套 · 阅读程序 17、第八套 · 阅读程序 17(代码见 2.3 节)——"边界 → 枚举 → 递归 → 回溯"的模板,一模一样的结构。
对照 3:浮点输出精度
第七套 · 选 12:fabs(a - b) < 1e-8——浮点数比较与精度处理。
第四套 · 完善程序 19(前缀和 + 区间平均):sum / (r - l + 1) 的区间均值写法,正是真题 ④ 空 1.0 * sum / (r - l + 1) 的同款运算。
至此,真题五段程序的算法模型,全部对上。

一句话:真题考到的高频易错点,8 套卷全部提前练过。
有人会问:是不是碰巧押中了?
看看 8 套卷背后的流程,你会知道这是"必修课"而不是"抽奖":

① 四道门禁,逐套留档
每套卷都过「命题 → 盲解 → 审题 → 排版」四道门禁,附带难度微调与复核、主编终审,每套留档 20~100+ 份验证文件(编译单元、盲解记录、审题报告、排版比对)。
② 双盲互证,344 个作答点零分歧
8 套卷共 344 个作答点,全部由命题人与盲解员在信息隔离下独立做完,8 套全部 43/43 一致——自己出的题,换个人(完全隔离)做一遍,答案全对、零歧义,才算过关。
③ 实机验证,不靠纸面推演
全部程序 g++ -std=c++17 -O2 -Wall 实机编译零警告;完善程序每个空的 4 个选项逐一代入实跑;30 个干扰项反例、48 组联合组合、最高 20 万组随机对拍——只有官方答案组合能全身而退。
④ 难度受控,全部落在 6:3:1 区间
8 套卷实测难度账(基础:中档:较难):
56:34:10、58.5:34.5:7、56.5:33.5:10、64.5:30.5:5、65:28:7、58:32:10、63:30:7、56:32:12——逐套达标。难度以盲解实测为准,命题自评不作数。
⑤ 原创查重,40 段题材零复用
8 套卷 40 段程序大题题材互不重复,同题号单选 15/15 换考法,每套入库前与已知真题、前序各套三层查重,全原创。
⑥ 退回修订文化
多套卷经历过"退回 → 修订 → 复核"(第二、三、五、六、七、八套均有退回记录),修订后重新盲解复核通过才准入库。标准不降格,宁退不凑。
第六部分:说句大实话——唯一的遗憾
真题第 14 题(数轴上取一点使距离之和最小,考中位数思想,2 分)——我们的 8 套卷没有设同型题。
这是整份比对里唯一没覆盖到的作答点。我们不藏着掖着,并且已经把它列入补强计划:下一套 / 专项材料补一道"绝对值最值·中位数"题,完成 100% 闭环。
8 套卷的成绩单是:43 个考点,42 个命中。
最后
一次考试,考的不只是学生,也考命题团队。
真题出来的那一刻,我们就把它和 8 套卷放在一起逐题拆解——因为我们对每一道题、每一个空、每一个干扰项从哪来、防哪个坑,都门儿清。
高精度加法的进位链、十六进制的手筋、位统计的骨架、栈的出栈序列、100 个结点的完全二叉树、跳台阶的递推、贪心的反例、递归枚举的模板……这些不是巧合,是这套卷子在成卷之前,就被反复验证过无数遍的"考点底座"。
剩下的,就看学生们在考场上,把这些练过千百遍的东西,稳稳地写出来了。