每年CSP-S初赛一结束,总有学生来问我同一类问题:阅读程序第一题到底怎么快速判断?也有人直接甩过来一句“我能把代码写出来,但让我不运行去推结果,我就发怵”。这个状态我太熟悉了。初赛的阅读题本质上不是考你会不会编程,而是考你在没有编译器和运行环境的情况下,能不能把一段代码从“字符序列”变成“精确计算过程”。2022年CSP-S提高组初赛的阅读程序第1题,恰好把这种事体现得特别典型:代码不长,变量不多,但如果你对二进制、异或、类型转换这些底层的C++语义理解得不够瓷实,很容易在选项里绕晕。
这篇文章不打算只贴一份“标准答案”,我更想把这道题完整地拆开,讲清楚每一行代码在做什么、阅读程序题到底该怎么在草稿纸上推演,以及考场上有哪些一眼就能用的判断技巧。无论你是刚学C++想冲提高组,还是已经刷了不少真题但阅读题正确率一直不稳,这篇文章应该都能帮上忙。
1. 为什么第1题看起来简单,却最容易丢分
1.1 初赛阅读题的难度阶梯
CSP-S初赛的阅读程序一共有三道大题,题号大约是16到28题之间,共占40分。这三道题在安排上是有讲究的:第1题通常是“基础题”,代码规模不大、结构不复杂,目的就是让大部分同学能拿到基础分;第2题开始加入更多算法思想,比如递归、排序、搜索或者动态规划;第3题往往就是整套初赛卷子里区分度很高的压轴阅读题。
但这不意味着第1题可以闭眼拿分。恰恰相反,我在辅导中观察到的现象是:很多同学第2、第3题靠排除法能拿到一部分分数,反而在最简单的第1题上因为“轻敌”翻车。
