GESP 五级 · GESP 202309 C++ 五级 第 25 题

判断题 · 答案 A · 考点:函数

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

题目

下面的 C++ 代码执行后将输出 0 5 1 6 2 3 4。

#include <iostream>
#include <algorithm>
using namespace std;

bool compareModulo5(int a, int b) {
    return a % 5 < b % 5;
}

int main() {
    int lst[7];
    for (int i = 0; i < 7; i++)
        lst[i] = i;

    // 对序列所有元素按compareModulo5结果排序
    sort(lst, lst + 7, compareModulo5);

    for (int i = 0; i < 7; i++)
        cout << lst[i] << " ";
    cout << endl;
    return 0;
}
答案:A

考点

函数

解题思维

STL 容器:vector(动态数组)、set/map(红黑树,有序)、unordered_set/map(哈希表,无序)。注意迭代器失效问题。

常见错误

审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。

详细解析(节选)

【考点】自定义比较函数|std::sort稳定性|余数分组排序

1. 🎯 考纲定位:GESP五级"数组与排序"模块核心考点。命题人用此题卡住考生对自定义比较函数作用范围的理解——很多人误以为sort会打乱等价元素顺序,其实std::sort在比较函数返回false时(等价)会保持原相对顺序。

2. 🧠 解题思维:原数组[0,1,2,3,4,5,6]按余数分组:余0→{0,5},余1→{1,6},余2~4各一。sort按余数升序排列各组,组内元素因比较函数返回false而保持原始先后关系,故0在5前、1在6前,输出0 5 1 6 2 3 4正确。

3. 🪤 陷阱拆解:错误选项B利用"排序必打乱等价项"的直觉误区。命题人偷换概念——compareModulo5(a,b)与compareModulo5(b,a)同假时视为相等,std::sort对相等元素不交换。若考生只背"sort不稳定"而忽略比较函数返回false的含义,必掉此坑。

4. 🔄 反命题思维:若将compareModulo5改为"余数降序"或"余数相同则按原值排序",输出会变为6 5 4 3 2 1 0或0 5 1 6 2 3 4(组内按值排序)。刷到类似题先问:比较函数在等价时返回什么?这决定了组内顺序是否确定。

同考点真题

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