GESP 五级 · GESP 202412 C++ 五级 第 13 题

选择题 · 答案 A · 考点:贪心算法

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

题目

假设有多个孩子,数组 g 保存所有孩子的胃口值。有多块饼干,数组 s 保存所有饼干的尺寸。小杨给孩子们发饼干,每个孩子最多只能给一块饼干。饼干的尺寸大于等于孩子的胃口时,孩子才能得到满足。小杨的目标是尽可能满足越多数目的孩子,因此打算采用贪心算法来找出能满足的孩子的数目,则横线上应填写的代码为( )。

int cooki4children(vector<int>& g, vector<int>& s) {
    sort(g.begin(), g.end());
    sort(s.begin(), s.end());

    int index = s.size() - 1; // 饼干数组下标
    int result = 0;
    for (int i = g.size() - 1; i >= 0; i--) {
        if (index >= 0 && s[index] >= g[i]) {
            ________________________  // 在此处填入代码
        }
    }
    return result;
}
答案:A

考点

贪心算法 讲解 →贪心算法 真题汇总 →

解题思维

根据上下文和C++语法规则确定空缺处应填的内容,关注函数调用参数、表达式和返回值类型。

常见错误

填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。

详细解析(节选)

【考点】贪心算法|数组遍历|vector(标准容器)

看到题先想:目标函数是最大化满足人数,约束是饼干尺寸≥胃口。贪心策略的核心在于局部最优能导向全局最优。排序后从后往前遍历,这是经典的两指针贪心框架,比正序遍历更直观地体现“大饼干配大孩子”的直觉。

逐个选项拆解:A 正确——匹配成功时,孩子数 +1,饼干指针 -1。B 减了 count 显然错。C 饼干指针 +1 会越界或重复用。D 指针 +1 同样越界。陷阱在于“饼干用掉就不能再给其他孩子”,指针必须同步递减,否则逻辑崩。C 中 index++ 会尝试使用更大的饼干,但当前已遍历过所有更大的饼干,必然越界或重复使用。D 同样如此。

反命题视角:若改题成“尽量满足胃口最小的孩子”,循环从 i=0 开始,index 从 0 开始,逻辑完全对称。遇到“饼干尺寸严格大于胃口”这类细节,条件判断和指针移动都要微调,但核心贪心思想不变。若将条件改为“饼干尺寸严格大于胃口”,则判断条件变为 s[index] > g[i],逻辑不变。若允许一个饼干喂多个孩子,则需改变数据结构为计数或优先队列,本题的贪心框架就不成立了。

同考点真题

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