如果一个正整数 $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。先分析已有代码的功能,确定输出目标,再反推横线处需要的代码。可用代入法验证。
将每个选项代入横线处验证是最可靠的方法。注意代码的完整逻辑和输出格式。
【考点】循环遍历|等式等价变形|整数除法陷阱
🎯 考纲定位 考查核心是循环遍历与等式等价变形,命题人专门卡住只会硬套公式的学生:他们看到兄弟数定义 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。