GESP 一级 · GESP 202512 C++ 一级 第 8 题

选择题 · 答案 A

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

题目

某个整数很长很长,形如:$1232123212321\ldots$,其规律是从 $1$ 开始逐一升高到 $3$ 然后逐一降低到 $1$,然后又逐一升高到 $3$,一直到很长很长。假设最高位编号为 $1$,要求判断从左边最高位开始的第 $N$ 位数是几?在横线处应该填入的代码是( )。

int N, M;
cout << "请输入编号: ";
cin >> N;
M = ______________;
if (M != 0)
    cout << M;
else
    cout << 2;
答案:A

解题思维

答案A。先分析已有代码的功能,确定输出目标,再反推横线处需要的代码。可用代入法验证。

常见错误

将每个选项代入横线处验证是最可靠的方法。注意代码的完整逻辑和输出格式。

详细解析(节选)

【考点】周期序列 | 取模定位 | 除零陷阱

🎯 考纲定位:GESP一级 循环与条件 / 整除取模 / 周期序列。命题人卡住的是考生对周期长度的敏感度——看到重复模式就应想到用取模定位,而非盲目模拟。

🧠 解题思维:看到 1-3-2-1 循环,周期长度 4。用 N%4 定位周期内位置:1→1, 2→2, 3→3, 0(4)→2。代码先算 M=N%4,非 0 时直接输出 M,等于 0 时输出 2,完美覆盖周期末尾。通法:周期序列第 N 项 = 周期数组[N%周期长度],余 0 时取周期最后一个元素。

🪤 陷阱拆解:B 除 4 得 1 错成 4 位是 2;C 除 3 忽略周期长度 4;D 除 3 更是乱用除法。最阴险的是 M=0 时输出 2——命题人把周期末尾单独处理,谁不写 if 就会漏掉第 4 个位置。

🔄 反命题思维:若周期改成 1-2-3-4-1-2-...,周期 5,就改 N%5 并调整输出;若周期是 1-2-3-2-1-2... 周期 4,当前代码已覆盖。核心是识别周期长度 L,用 N%L 定位,余 0 时取周期最后一个元素。

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