GESP 二级 · GESP 202512 C++ 二级 第 4 题

选择题 · 答案 B · 考点:循环结构

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

题目

一个小数是 $0.123123123\ldots$ 无限循环,其小数点后 $1$ 位是 $1$,后 $2$ 位是 $2$,依此类推,求第 $N$ 位的值。横线处应填入的代码是( )。

int N;
cin >> N;
remainder = ___________;

if (remainder == 0)
    cout << 1;
else if (remainder == 1)
    cout << 2;
else
    cout << 3;
答案:B

考点

循环结构

解题思维

答案B。循环补全要分析循环变量的初始值、条件和更新方式,确保能产生目标输出。

常见错误

代入法验证时注意选项之间的细微差别。循环条件中的<和<=可能导致完全不同的结果。

详细解析(节选)

【考点】循环结构中的数学映射|取余运算的应用|循环节周期计算

考纲定位:GESP 二级 C++ 卷中,这道题专门卡住"对循环周期理解不深"和"混淆 N 与 N-1 的起始位置"的弱点。命题人把循环节长度 3 藏在小题里,逼你用数学映射而不是死记结论。

解题思维:看到"无限循环小数"先想"循环节长度为 3"。关键观察:第 1 位的 N=1,1%3=1 却代表数字 1,所以直接用 N%3 会错位。推理:把 N 减 1 让余数 0 对应第 1 位,所以 remainder = (N-1) % 3。通法:任何循环节长度为 L 的问题,第 N 位的下标 = (N-1) % L,输出数字 = 下标 + 1。

陷阱拆解:A 选项 N % 3 利用"第 N 位直接取余"的直觉,但余数 0 应映射到数字 3,这里却输出 1,错位。C 选项 N / 3 完全错误,得到的是完整循环节个数而非位置偏移。D 选项 (N-1) / 3 给出的是位置索引(0,1,2),但题目要求数字(1,2,3),需要映射。最阴险的细节:代码里用 if-else 判断 remainder == 0,1,却输出 1,2,3,这意味着 remainder 0 必须对应数字 1,而 N%3=0 时 N 是 3 的倍数,对应数字 3,所以必须用 (N-1)%3 才能让 0 落在 1 上。

反命题思维:如果把循环节改成问"第 N 个完整循环节的长度",答案会变成 N/3;如果改成 0.123456... 则周期变为 6,答案变成 (N-1)%6。刷到类似题先问:命题人想考我"循环节长度"还是"起始偏移",还是"输出映射"。

同考点真题

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