GESP 八级 · GESP 202312 C++ 八级 第 13 题

选择题 · 答案 B

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

题目

下面程序的输出为( )。

#include <iostream>
using namespace std;

int main() {
    int cnt = 0;
    for (int a = 1; a <= 10; a++)
        for (int b = 1; b <= 10; b++)
            for (int h = 1; h <= 10; h++)
                if ((a + b) * h == 20)
                    cnt++;
    cout << cnt << endl;
    return 0;
}
答案:B

解题思维

拿到三重循环别慌,核心就一句:(a+b)×h=20。先把20的因数拎出来,看h能取哪些值,再对每个h数有多少对(a,b)加起来等于20/h,最后累加就是答案。

常见错误

最容易栽跟头的就是漏掉边界值。比如只盯着中间几个因数算,把h=1和h=10这种极端情况给忘了,或者把(a+b)的范围想窄了,以为a,b只能在1~5里凑,其实只要和够就行。还有人会把题目看花眼,把乘法条件当成加法条件去凑数,或者在数对的时候重复计数,比如把(a,b)和(b,a)当成两回事,其实循环里a、b都是独立遍历的,和相等的情况会自然被统计多次,这点要特别注意。

详细解析(节选)

考点定位与命题意图

这道题落在GESP八级「算法与数据结构」模块,考的是最基础的暴力枚举能力。命题人卡住的是那些一看到三重循环就下意识想优化、想剪枝的考生——八级不考复杂算法,就考你能不能老老实实把题目条件翻译成代码跑一遍。

人话讲清知识点

题目里有个条件 (a + b) * h == 20。别被乘法吓住,咱们把它拆开看:

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