GESP 三级 · GESP 202406 C++ 三级 第 24 题

判断题 · 答案 A · 考点:循环控制

← 整套速查表 GESP 三级 全部真题

题目

执行下面 C++ 代码后,输出的结果不可能是 $89781$。

#include <iostream>
#include <cstdlib>  // 为了使用 rand() 和 srand()
#include <ctime>    // 为了使用 time()

using namespace std;

int main() {
    // 设置随机种子
    srand(time(NULL));

    int i = 1;
    int s[5];
    while(i <= 5)
    {
        int a = rand() % 10;

        if(a % 3 == (i + 1) % 3)
            s[i++] = a;
    }
    for(int i = 1; i <= 5; i++)
        cout << s[i];
    cout << endl;
    return 0;
}
答案:A

考点

循环控制

解题思维

答案A。数组和位运算的代码追踪要特别小心:数组下标从0开始,位运算结果可能不直观。建议画图辅助。

常见错误

位运算追踪时建议把数字写成二进制形式再逐位计算。

详细解析(节选)

【考点】循环控制|条件判断|数组索引

本题考查循环嵌套条件判断与数组动态填充。命题人设置此题,精准卡住考生对"循环变量与索引同步"的直觉盲区——多数人会急于验证数字是否符合模运算规律,却忽略条件中(i+1)%3随i递增而周期性变化的本质。

解题关键在于逐次验证条件:i=1时需a%3=2(8符合),i=2时需a%3=0(9符合),i=3时需a%3=1(7符合),i=4时需a%3=2(8符合),但i=5时需a%3=0(1不符合)。因此输出89781在逻辑上绝对不可能。

陷阱设计极阴险:选项B诱使考生认为"前四位都符合,第五位只是巧合",实则命题人将(i+1)%3的周期性隐藏在看似随机的条件里,利用"绝对化表述"制造思维惯性。例如,当i=5时条件要求a%3=0,而1%3=1,此矛盾是解题核心。若只背结论不追踪索引,必然误判。

反命题视角:若将条件改为a%3==i%3,则i=5时1符合要求,答案翻转为B;若将目标改为89780,第五位0仍符合,答案仍为B。此类变式可帮助识别命题人对边界条件的敏感度。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断