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

选择题 · 答案 D · 考点:循环控制

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

题目

求解鸡兔同笼。在如下 C++ 代码中,tou 代表鸡和兔的头总数,jiao 代表鸡和兔的脚总数。先后两个 输入均为正整数。关于该程序下面说法准确的是(  )

int tou, jiao, tu_tou, ji_tou;

cout << "请输入鸡和兔的头总数:";

cin >> tou;

cout << "请输入鸡和兔的脚总数:";

cin >> jiao;
for (tu_tou = 0; tu_tou < tou + 1; tu_tou++) { // L1
ji_tou = tou - tu_tou;
if (tu_tou * 4 + ji_tou * 2 == jiao) {

printf("兔的数量=%d,鸡的数量=%d\n", tu_tou, ji_tou);

break;
}
}
if (tu_tou == tou) // L2

printf("无解\n");

答案:D

考点

循环控制

解题思维

看到代码先圈循环范围tu_tou< tou+1,明白tu_tou会取到tou。然后看if条件,找到解就break,tu_tou保持为解对应的值。最后if (tu_tou==tou)是想判断"没找到解",但break后tu_tou可能等于tou,导致误判。逐项分析选项:A看似能解,但tou=0时循环范围错误,且双重输出;B加初始化不影响循环逻辑;C缩小范围到tou会漏掉tu_tou=tou的解,比如全兔情况;D把if改成==tou+1,只有循环跑完且没找到解时才进入,避免双重输出,所以能正确求解。

常见错误

A项忽略循环内break后tu_tou可能等于tou,导致双重输出;B项以为初始化是问题,其实循环内会赋值;C项认为循环范围应该到tou,但tu_tou=tou是合法解(全兔);D项改if条件后无解不输出,但命题人认为改后能避免双重输出。

详细解析(节选)

考纲定位

本题考查GESP一级算法模块的循环控制与逻辑判断。命题人卡住考生对循环边界和if逻辑的直觉——很多考生凭经验认为"最后判断tu_tou==tou"就能判断无解,却忽略循环内break后的变量状态。

解题思维

看到代码先圈出循环范围tu_tou< tou+1,明白tu_tou会取到tou(因为< tou+1等价于≤ tou)。然后看if条件,找到解就break,tu_tou保持为解对应的值。最后if (tu_tou==tou)是想判断"没找到解",但break后tu_tou可能等于tou(全兔解),导致误判。逐项分析选项:A看似能解,但tou=0时循环范围错误,且双重输出;B加初始化不影响循环逻辑;C缩小范围到tou会漏掉tu_tou=tou的解,比如全兔情况;D把if改成==tou+1,只有循环跑完且没找到解时才进入,避免双重输出,所以能正确求解。

同考点真题

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