#include<iostream>
using namespace std;
int main()
{
int i, a, b, c, d, f[4];
for(i = 0; i < 4; i++) cin >> f[i];
a = f[0] + f[1] + f[2] + f[3];
a = a / f[0];
b = f[0] + f[2] + f[3];
b = b / a;
c = (b * f[1] + a) / f[2];
d = f[(b / c ) % 4];
if(f[(a + b + c + d) % 4] > f[2])
cout << a + b<< endl;
else cout << c + d << endl;
return 0;
}输入:9 19 29 39 输出:_______________
拿到这种程序填空或阅读题,别急着敲计算器。先给数组 f 标上值,按代码顺序一行一行‘过电影’,把每一次赋值后的变量值记下来,最后看条件分支走哪条路。
最大的坑就是整数除法。很多学生看到 96/9 下意识想 10.66,或者用四舍五入,结果 a 就错了,后面 b、c、d 全歪。还有取模运算里如果中间结果算错,下标越界也是常事。另外条件判断里 f[(a+b+c+d)%4] 这个下标别算错,很多人会漏掉括号优先级,把加法先算完再取模,其实这里就是先求和再取模,但重点还是整数除法截断。
这道题表面看是段代码阅读,核心其实就考三个点:C++ 整数除法的截断规则、一维数组下标计算、以及条件分支的逻辑判断。命题人爱在整数除法这里挖坑,因为学生容易用数学上的除法思维去套,忘了 C++ 里两个 int 相除直接舍去小数部分。顺序结构虽然简单,但变量依赖链很长,一步错后面全错,所以必须严格按执行流推演。
现在输入是 9 19 29 39,先读入数组:f[0]=9, f[1]=19, f[2]=29, f[3]=39。接下来看 a 的计算:a 先等于四个数之和,9+19+29+39=96。然后 a=a/f[0],也就是 96/9。这里一定要用整数除法,96÷9=10 余 6,截断后 a=10。很多同学会算成 10.66 或者四舍五入成 11,那就错了。
接着算 b:b=f[0]+f[2]+f[3]=9+29+39=77。然后 b=b/a,也就是 77/10。同样整数除法,77÷10=7 余 7,截断后 b=7。这一步如果 a 算错了,b 肯定也跟着错。
再看 c:c=(b*f[1]+a)/f[2]。先算分子:b*f[1]=7*19=133,加上 a=10,得到 143。分母是 f[2]=29。143/29 整数除法是 4 余 27,所以 c=4。这里容易把乘法优先级搞错,或者忘记加 a,导致分子算成 133 直接除以 29 得到 4,虽然结果碰巧一样,但逻辑上必须把 a 加进去。
然后算 d:d=f[(b/c)%4]。先算 b/c=7/4=1(整数除法),再 1%4=1,所以取 f[1]=19,d=19。这一步下标计算是重点,很多人会先算 b/c 的余数,或者忘记取模,导致下标跑到 f[2] 或 f[3] 去。
现在所有变量都有了:a=10, b=7, c=4, d=19。接下来看条件判断:if(f[(a+b+c+d)%4] > f[2])。先算括号里的和:10+7+4+19=40。40%4=0,所以取 f[0]=9。然后比较 9 > f[2],也就是 9 > 29,显然不成立。条件为假,走 else 分支,输出 c+d=4+19=23。
整个过程就是按代码顺序一步步代入,每一步都注意整数除法的截断和下标计算。命题人喜欢在中间变量依赖链上设陷阱,比如 a 算错导致 b 错,或者 c 的分子漏加 a 导致 c 错,进而影响 d 的下标。所以做题时一定要把每一步的值都写清楚,不要跳步。
从考频数据来看,‘运算符与表达式’这个知识点在题库里一共考了 261 题,覆盖从 2007 到 2026 的所有级别,其中 2023 年考了 91 题,2024 年 41 题,2025 年 61 题,2026 年 14 题,说明这类题目近几年依然是高频考点,尤其是整数除法和取模运算的结合。‘一维数组’考了 224 题,2023 年 27 题,2024 年 48 题,2025 年 55 题,2026 年 59 题,增长趋势很明显,数组下标计算和结合运算符的题目越来越常见。‘顺序结构’虽然只考了 5 题,但主要集中在 2008-2010 年,近几年较少单独考,但作为基础逻辑依然重要。
基于这些数据,未来这类题目大概率会继续出现在 NOIP 提高组初赛和 CSP 提高级中,形式可能更加复杂,比如增加多层嵌套的条件判断,或者在数组下标里加入更复杂的表达式。但核心还是整数除法的截断规则和数组下标计算,这些是基础中的基础,必须扎实。
总之,这道题的答案就是 23,关键在于严格按代码执行流推演,每一步都注意整数除法的截断和下标计算,不要掉进命题人设的坑里。