GESP 一级 · GESP 202409 C++ 一级 第 15 题

选择题 · 答案 B

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

题目

如果一个正整数 $N$ 能够表示为 $X \times (X+1)$ 的形式,这里称它是一个“兄弟数”。例如,输入 6,则输出“6 是一个兄弟数”。下面 C++ 代码用来判断 $N$ 是否为一个“兄弟数”,在横线处应填入的代码可从 i)-iv) 中选择,则有几个能完成功能?( )。

int N;
cin >> N;
for (int i = 0; i <= N; i++)
    if (__________________)
        cout << N << "是一个兄弟数\n";

i) N == i * (i + 1) ii) N == i * (i - 1) iii) N / (i + 1) == i iv) N / (i - 1) == i

答案:B

解题思维

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

常见错误

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

详细解析(节选)

【考点】循环遍历|等式等价变形|整数除法陷阱

🎯 考纲定位 考查核心是循环遍历与等式等价变形,命题人专门卡住只会硬套公式的学生:他们看到兄弟数定义 N=X(X+1) 就只想到直接乘法判断,完全忽略等式两边同时除以 (X+1) 得到的除法形式。这题选 2 个能完成功能的选项,i 和 iii 正确,ii 和 iv 错误。

🧠 解题思维 循环中的 i 就是假设的 X,要验证 N=X(X+1) 等价于验证 N/(X+1)=X 或 N=X(X+1)。通法是"双向等价"——乘法与除法互为逆运算,只在整数除法且能整除时成立,这里 i+1 恰好是除数且 i 是商,逻辑完美闭环。

🪤 陷阱拆解 ii 把 X+1 误写成 X-1,看似对称实则把原等式 N=X(X+1) 变成 N=X(X-1),完全偏离定义;iv 同理,除数 i-1 与商 i 搭配后得到 N=i(i-1),仍是错误等式。最阴险的是 iii 的整数除法陷阱:若 N 不是 (i+1) 的倍数,除法会截断,但循环里 i 从 0 到 N,当 i 恰好是满足 N=i(i+1) 的解时,N 必然能被 i+1 整除,所以 iii 不会出错——这恰恰是命题人想让学生通过"整除性"来验证等式成立。

🔄 反命题思维 把题改成"兄弟数定义为 N=X(X-1)",则 ii 和 iv 正确,答案就变成 2 个了;若改成"判断 N 是否为 X(X+1) 的倍数",则 iii 正确但 i 错误,因为 i 是等式而非倍数关系。刷到类似题先自问"命题人想考我什么",是考等式还是考倍数,直接决定选 i 还是 iii。

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