在下列代码的横线处填写( ),可以使得输出是 42。
#include <iostream>
using namespace std;
int main() {
int sum = 0;
for (int i = 1; i <= 20; i++)
if (________) // 在此处填入代码
sum += i;
cout << sum << endl;
return 0;
}拿到题先别急着代选项,心里默算一下1到20里哪几个数加起来能凑出42。发现只有1、2、4、5、10、20这几个数(全是20的约数),和正好是42。这题本质就是考你识别‘枚举除数’这个逻辑,把循环条件写成能筛选出这些数的表达式。
最容易掉进‘惯性思维’的坑:看到整除运算下意识写 i%20==0,结果只选中20,和远不够;或者被C选项‘1到8’这种连续区间迷惑,算出36离42很近,以为凑凑就能行;还有D选项‘i>=18’,直接加最后三个数57,命题人故意用绝对化条件诱使你忽略总和大小。代入验证时千万别只看‘有没有满足条件的数’,一定要算出‘所有满足条件的数和’,这才是得分关键。
这是一道典型的循环控制与条件判断结合题,核心考点是整除运算(取模)以及如何在循环中通过条件筛选特定数值。在GESP二级这类考试中,这种‘补全循环条件’的题型非常高频,命题人往往不直接让你算和,而是给你一个目标和,让你反推条件。
for (int i = 1; i <= 20; i++) 就是让变量 i 从 1 数到 20,每次数完一次就 +1,直到超过 20 为止。a % b:就是看 a 除以 b 余几。如果余数是 0,说明 b 能整除 a,或者说 a 是 b 的倍数。sum += i 就是把当前的 i 加到总和里。这道题的陷阱不在语法,而在思维定势。 命题人喜欢用‘看似合理但数量不对’的选项干扰你。比如 C 选项 i <= 8,看起来很简单,1 到 8 的和是 36,离 42 很近,容易让人产生‘差一点就对了’的错觉;D 选项 i >= 18,直接加最后三个数 18+19+20=57,比 42 大,但命题人故意让你忽略总和,只关注‘有没有满足条件的数’。 最阴险的是 B 选项 20 % i == 0。很多学生看到整除,第一反应是写 i % 20 == 0(即 i 是 20 的倍数),结果只选中 20,和远远不够。命题人就是用这个反直觉写法,考察你是否真正理解‘谁除以谁余 0’的含义。
第一步:算目标和。题目要求输出 42。1 到 20 所有数的和是 210,42 远小于 210,说明只累加了少数几个数。 第二步:反推哪些数加起来是 42。脑子里快速枚举:1+2+4+5+10+20 = 42。正好!这六个数有什么共同点?
结论:我们要找的是 1 到 20 中,能整除 20 的所有数。 第三步:对应到循环条件。循环变量是 i,从 1 到 20。要选出能整除 20 的 i,条件必须是 20 % i == 0。
现在把四个选项代入,不是只看‘有没有满足条件的数’,而是算出所有满足条件的数的和。
i % 3 == 01 到 20 中 3 的倍数有:3, 6, 9, 12, 15, 18。 和 = 3+6+9+12+15+18 = 63。 63 > 42,排除。
20 % i == 01 到 20 中能整除 20 的数有:1, 2, 4, 5, 10, 20。 和 = 1+2+4+5+10+20 = 42。 完美匹配!
i <= 81 到 8 的和 = (1+8)*8/2 = 36。 36 < 42,排除。
i >= 1818, 19, 20 的和 = 57。 57 > 42,排除。
1. 别被 C 选项骗了:1 到 8 的和 36 离 42 很近,考试时容易紧张算错或者直觉觉得‘差不多就行’。一定要精确计算。 2. 别惯性写 i % 20 == 0:这是最常见的错误。i % 20 == 0 意味着 i 是 20 的倍数,在 1 到 20 范围内只有 i=20 满足,和只有 20,远远不够。 3. 别只看‘有没有’:代入验证时,很多学生只检查‘有没有数满足条件’,忽略了‘所有满足条件的数加起来是多少’。这道题的得分点就在‘累加和’上。 4. 注意运算顺序:20 % i == 0 是合法表达式,先算取模,再比较是否等于 0。不要写成 20 % (i == 0) 这种错误形式。
从真题库数据看,这类循环控制题目在 GESP 二级中非常稳定:题库共考过 5 题,覆盖 3 个考试级别(2019-2024),其中GESP 二级考了 2 题,CSP 提高级考了 2 题,GESP 一级考了 1 题。逐年分布显示,2019 年考了 2 题,2023 年又考了 2 题,2024 年考了 1 题。这说明‘循环条件筛选’是命题人反复打磨的考点,尤其在二级考试中,几乎每年都会以不同形式出现(比如本题就是‘筛选约数’,其他题可能是‘筛选偶数’‘筛选质数’等)。
基于现有数据,暂无足够依据预测具体的变体形式,但可以合理推断:命题人可能会继续用‘整除’‘约数’‘倍数’这类运算作为筛选条件,只是目标数字和范围会变化(比如改成 30 的约数,或者 1 到 50 中筛选满足某条件的数)。这类题目核心不变——先算目标和,再反推条件,最后验证。只要掌握这个思维链条,无论数字怎么变,都能快速锁定答案。