GESP 2025 年 12 月 C++ 五级认证真题解析(单选 1-15)
GESP 2025 年 12 月 C++ 五级认证考试单选题解析,涵盖循环单链表遍历、区块链节点插入、链表删除复杂度、模运算性质、递归与循环对比、唯一分解定理、线性筛法、排序稳定性、归并排序特性、快速排序最坏情况、二分查找边界、二分答案模板、阶乘复杂度、贪心任务调度及高精度加法实现。重点考察数据结构基础、算法复杂度分析及经典算法模板应用。

GESP 2025 年 12 月 C++ 五级认证考试单选题解析,涵盖循环单链表遍历、区块链节点插入、链表删除复杂度、模运算性质、递归与循环对比、唯一分解定理、线性筛法、排序稳定性、归并排序特性、快速排序最坏情况、二分查找边界、二分答案模板、阶乘复杂度、贪心任务调度及高精度加法实现。重点考察数据结构基础、算法复杂度分析及经典算法模板应用。



想象一列环形小火车,每节车厢(结点)都有一个数字,最后一节车厢指回第一节,永远绕圈跑。现在要求写一个程序,把火车上的数字刚好每节都念一遍,不多、不少、不死循环。
Node* p = head; _______________________ cout << endl;
注意:这是循环单链表! p 永远不会变成 nullptr!
while (p != nullptr) { ... }
死循环警告!在循环链表里,next 永远不会是 nullptr。
do { cout << p->data << " "; p = p->next; } while (p != head);
do...while?C
do...whilep != headnullptr 判断结束区块链就像一串历史账本,每一页(区块)都记着'上一页是谁',新账只能加在最后,不能插队。
实现 addBlock,把新区块正确接到链尾。
tail->prevtail 指回老区块
都会把'链'弄断。Block* newBlock = new Block(tail->index + 1, data, tail); tail = newBlock;
prev 👉 指向原来的 tailtail 👉 更新成新区块B
你在一条队伍里,想把中间的一个同学请走:
node->prev->next = node->next; node->next->prev = node->prev;
不用找别人,直接删。 时间复杂度:O(1)
while (prev->next != node) { ... }
必须从头找前驱。 时间复杂度:O(n)
双链表删除指定结点是 O(1),单链表是 O(n)
C
prev,操作更快两个数 a 和 b,对 模 m同余,意思是:除以 m,余数一样。
D
a ≡ b (mod m) 👉 余数相同0 ~ m-1你要算两个数的最大公约数:
gcd1 👉 递归gcd2 👉 while 循环'当数很大时,递归比循环更快' 不对! 递归:
D
把一个数拆成最小的积木,而且拆法只有一种。
每个大于 1 的整数都可以唯一地写成若干个质数的乘积 例如:
60 = 2 × 2 × 3 × 5
B
你要从 1 到 n,一次性找出所有素数。这就是线性筛(欧拉筛)。
for (int j = 0; j < primes.size() && i * primes[j] <= n; j++)
这行 for 到底在干嘛?
现在:
i:当前巡逻到的数字primes[j]:第 j 个已知素数
我们做一件事:用当前的 i 去乘每一个素数 primes[j],把得到的数标记为'合数'。sqrt(n) ❌j=1 开始 ❌primes[j] 越界 ❌A
有一排小朋友排队,他们手里都拿着数字牌。
错。快排会交换远距离元素,相同元素顺序可能改变。
对。合并时:if (arr[i] <= arr[j]) // 左边先来,相同元素 👉 左边优先 → 顺序不变。
错。插入排序非常温柔,不会打乱相同元素顺序,它是稳定的!
错。冒泡只交换数组里的元素,不用额外数组,是原地排序。
B
归并排序像一个分队作战的军队,先拆成小队,再合并成大队。
✔ 对
✔ 对(临时数组 temp)
错。最坏情况也是 O(n log n)
✔ 对(稳定 + 时间可靠)
C
快速排序选一个'队长'(pivot),让大家站到左右两边。但如果队长选得太差……
int pivot = arr[low]; // 选第一个
如果数组是:1 2 3 4 5
O(n²)
C(O(n²))
你在一个排好序的队伍中,要找第一个 ≥ x 的位置。
while (l < r) { int mid = l + (r - l) / 2; if (arr[mid] >= x) r = mid; else l = mid + 1; }
[l, r)l 指向答案arr.size()
这是标准 lower_bound。A(代码逻辑正确)
l < r ✔r = mid ✔l <= r小杨有一根木头,要切成几段,每段长度 ≤ x,想让 x 尽量小。
if (check(L, K, mid)) r = mid; else l = mid + 1;
这是标准答案。
check == true:说明还能更小 → 向左找check == false:太小了 → 向右找A
你要算:n! = n × (n-1) × ...
时间复杂度相同,空间不同。
A
你接了很多任务,每个任务:1 单位时间,有截止时间 + 利润,目标:赚最多钱。
slot[t] = true; totalProfit += task.profit;
A
你在纸上算:
789 + 456
------
从个位开始,一位一位算,还要进位。
c.push_back(carry % 10); carry /= 10;
%10:当前位/10:进位/10 ❌B

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online