#include <iostream>
using namespace std;
int main()
{
int a[4],b[4];
int i,j,tmp;
for (i=0;i<4;i++)
cin >> b[i];
for (i=0;i<4;i++)
{
a[i]=0;
for (j=0;j<=i;j++)
{
a[i]+=b[j];
b[a[i]%4]+=a[j];
}
}
tmp=1;
for (i=0;i<4;i++)
{
a[i]%=10;
b[i]%=10;
tmp*=a[i]+b[i];
}
cout << tmp << endl;
return 0;
}输入:2 3 5 7 输出:_______________
这题考的是对程序执行流程的精准模拟,特别是数组下标动态变化(a[i]%4)和累加过程中的数值传递。拿到题别急着算,先理清循环里a和b是怎么互相‘喂’数据的,画个表跟踪每一轮a[i]变成多少、b里哪个位置被加了多少,最后再算乘积。
最容易栽跟头的是手动模拟时把下标搞错,比如把a[i]%4当成固定下标,或者在累加时把a[j]写成了a[i],导致b数组的值全跑偏。还有个隐形坑是最后取模前的累加值可能很大,直接算tmp会溢出,得先对每个a[i]和b[i]单独取模再相加相乘,很多人会漏掉这一步直接拿大数乘,结果肯定不对。另外,循环里b的下标是动态变的,很多人习惯以为b[0]到b[3]是独立存储的,其实b[a[i]%4]是在不断往同一个位置堆数据,这会让b数组的值剧烈变化,必须逐行盯紧。
这道题考查的是对程序执行流程的精准模拟,特别是数组下标动态变化(a[i]%4)和累加过程中的数值传递。拿到题别急着算,先理清循环里a和b是怎么互相‘喂’数据的,画个表跟踪每一轮a[i]变成多少、b里哪个位置被加了多少,最后再算乘积。
输入是b=[2,3,5,7],a全清零。外层i从0到3,内层j从0到i,每次把a[i]加上b[j],然后再把a[j]加到b[a[i]%4]里。这步‘b[a[i]%4]+=a[j]’是坑点,因为a[i]刚被更新,它的值可能很大,取模后才作为下标,而且同一个下标可能被多次累加,必须逐行盯紧。
i=0时,a[0]=0,j=0:a[0]+=b[0]=2→a[0]=2;b[2%4]=b[2]+=a[0]=2→b[2]=5+2=7。此时a=[2,0,0,0],b=[2,3,7,7]。
i=1时,a[1]=0,j=0:a[1]+=b[0]=2→a[1]=2;b[2%4]=b[2]+=a[0]=2→b[2]=7+2=9。j=1:a[1]+=b[1]=3→a[1]=5;b[5%4]=b[1]+=a[1]=5→b[1]=3+5=8。此时a=[2,5,0,0],b=[2,8,9,7]。
i=2时,a[2]=0,j=0:a[2]+=b[0]=2→a[2]=2;b[2%4]=b[2]+=a[0]=2→b[2]=9+2=11。j=1:a[2]+=b[1]=8→a[2]=10;b[10%4]=b[2]+=a[1]=5→b[2]=11+5=16。j=2:a[2]+=b[2]=16→a[2]=26;b[26%4]=b[2]+=a[2]=26→b[2]=16+26=42。此时a=[2,5,26,0],b=[2,8,42,7]。
i=3时,a[3]=0,j=0:a[3]+=b[0]=2→a[3]=2;b[2%4]=b[2]+=a[0]=2→b[2]=42+2=44。j=1:a[3]+=b[1]=8→a[3]=10;b[10%4]=b[2]+=a[1]=5→b[2]=44+5=49。j=2:a[3]+=b[2]=49→a[3]=59;b[59%4]=b[3]+=a[2]=26→b[3]=7+26=33。j=3:a[3]+=b[3]=33→a[3]=92;b[92%4]=b[0]+=a[3]=92→b[0]=2+92=94。此时a=[2,5,26,92],b=[94,8,49,33]。
第二阶段把每个a[i]和b[i]对10取模:a=[2,5,6,2],b=[4,8,9,3]。然后tmp依次乘(a[i]+b[i]):(2+4)=6,(5+8)=13,(6+9)=15,(2+3)=5,6×13×15×5=5850。所以输出5850。
易错点:手动模拟时把下标搞错,比如把a[i]%4当成固定下标,或者在累加时把a[j]写成了a[i],导致b数组的值全跑偏。还有个隐形坑是最后取模前的累加值可能很大,直接算tmp会溢出,得先对每个a[i]和b[i]单独取模再相加相乘,很多人会漏掉这一步直接拿大数乘,结果肯定不对。另外,循环里b的下标是动态变的,很多人习惯以为b[0]到b[3]是独立存储的,其实b[a[i]%4]是在不断往同一个位置堆数据,这会让b数组的值剧烈变化,必须逐行盯紧。
控制结构这类题在题库里非常常见,429道题覆盖了所有级别,尤其是2023-2026这几年考得最猛,2023年81题、2024年138题、2025年160题、2026年45题,说明命题人特别喜欢挖这种‘看起来简单但细节多’的坑。一维数组更是高频考点,224道题里2023年27题、2024年48题、2025年55题、2026年59题,逐年递增,基本可以断定未来还会继续考这种动态下标+累加的组合。GESP五级、四级、三级、六级、七级、八级、NOIP提高组初赛、CSP入门级、NOIP普及组初赛都有分布,说明从入门到提高全覆盖。
预测:基于考频趋势,未来几年(2027-2028)这类‘数组下标动态变化+多重循环模拟’的题大概率还会出现在NOIP提高组初赛和GESP五级、六级中,命题人可能会换个输入规模(比如n=5或n=8)来增加难度,但核心思路不变——画表逐行跟踪。暂无足够依据预测具体年份,但方向明确:继续考模拟细节。