老师已为大家准备好电子打印版,需要完整电子版文件的朋友,可以拉到文末查看。 【答案解析】
1.解释:答案选D。 详细解析见下图——
2.解释:答案选C。
详细解析见下图——
3.解释:答案选B。
详细解析见下图—— 相关知识点的复习与拓展: 截至考试当年3月份,有关C++语言中"哑节点"应用的注意事项,罗列如下图所示:
4.解释:答案选A。
详细解析见下图——
5.解释:答案选C。
详细解析见下图——
6.解释:答案选C。
详细解析见下图—— 7.解释:答案选B。 详细解析见下图—— 8.解释:答案选A。 详细解析见下图—— 9.解释:答案选D。 详细解析如下—— 选项A:递归调用层次过深时,每次调用都会在栈中压入栈帧,累计超出栈的有限容量就会耗尽栈空间导致栈溢出(Stack Overflow),该说法正确。 选项B:尾递归是指函数的最后一步操作就是递归调用自身(返回值不参与后续运算)。这种情况下,当前函数的栈帧已经没有保留价值,编译器/解释器可以通过尾递归优化(Tail Call Optimization, TCO)将其复用或改写为跳转/循环结构,从而不再消耗新的栈空间,避免栈溢出。符合条件的尾递归函数,编译器可以通过尾调用优化,直接复用当前栈帧而不新增栈帧,从而避免栈溢出,该说法正确。 选项C:所有递归函数都可以通过循环改写,对于简单尾递归可直接转为普通循环,复杂非尾递归可借助显式栈模拟递归逻辑,完全脱离系统调用栈的限制,从而避免栈溢出,该说法正确。 选项D:栈溢出属于严重的运行时错误,发生后程序会直接崩溃终止,无法继续执行后续代码,常规异常处理机制也无法兜底恢复,该说法错误。 10.解释:答案选A。
详细解析见下图—— 相关知识点的复习与拓展: 11.解释:答案选B。 详细解析见下图—— 相关知识点的复习与拓展:
截至考试当年3月,有关主定理(Master Theorem)的相关知识点,简单罗列如下——
12.解释:答案选B。 详细解析见下图—— 13.解释:答案选C。 详细解析如下—— 14.解释:答案选B。 详细解析见下图——
相关知识点的复习与拓展:
截至考试当年3月,有关十大经典排序算法的特点对比,可以参考下图帮助记忆—— 15.解释:答案选B。
详细解析见下图——
【答案解析】
1.解释:正确。
详细解析见下图——
2.解释:正确。 详细解析见下图——
3.解释:错误。
详细解析如下——1. 稳定排序定义:排序后,相等元素的相对先后顺序保持不变。
2. 快速排序的本质:快排是"不稳定排序",和选哪个元素做枢轴无关。
哪怕每次选中间元素当 pivot,在划分(partition)过程中,会把小于枢轴、大于枢轴的元素交换,相等元素的相对位置仍然可能被打乱。
举个例子直观理解
数组:[2a, 2b, 1],选中间元素 2b 作为枢轴,划分后交换得到:[1, 2b, 2a];两个值都是 2,原来 2a 在 2b 前面,排序之后顺序颠倒,不稳定。
核心结论——
● 稳定性由排序算法的元素交换逻辑决定,不是由枢轴选择策略决定。快速排序无论怎么选枢轴,都不能变成稳定排序。
● 稳定排序:归并排序、插入排序、冒泡排序;
● 不稳定排序:快排、堆排、简单选择排序。相关知识点的复习与拓展:
截至考试当年3月,有关十大经典排序算法的特点对比,可以参考下图帮助记忆—— 4.解释:正确。
详细解析见下图——
相关知识点的复习与拓展:
截至考试当年3月,有关主定理(Master Theorem)的相关知识点,简单罗列如下——
5.解释:错误。
详细解析见下图——
相关知识点的复习与拓展: 建议将题干中代码修改如下——
long long cnt = 0;voidmerge_count(vector<int>& a, int l, int r){if (l >= r) return;int m = (l + r) / 2;merge_count(a, l, m);merge_count(a, m + 1, r);int i = l, j = m + 1, k = 0;vector<int> tmp(r - l + 1);while (i <= m && j <= r) {if (a[i] <= a[j]) {tmp[k++] = a[i++];} else {cnt += (m - i + 1); // a[i..m] 都 > a[j]tmp[k++] = a[j++];}}while (i <= m) tmp[k++] = a[i++];while (j <= r) tmp[k++] = a[j++];for (int p = l; p <= r; p++) a[p] = tmp[p - l];}6.解释:正确。
详细解析见下图——
7.解释:正确。
详细解析见下图——
8.解释:错误。
详细解析见下图——
9.解释:错误。
详细解析见下图——
10.解释:错误。
详细解析见下图——
GESP 2026年3月 C++五级 有限不循环小数
#include<iostream>using namespace std;/*** 判断一个数是否为“终止数”* 根据题目样例推断,“终止数”是指质因数只包含 2 和 5 的正整数。* 例如:2, 4, 5, 8, 10 等。** @param x 待判断的正整数* @return true 如果是终止数,否则返回 false*/boolisTerminating(int x){// 如果数字小于等于0,直接返回 false(根据题意 L >= 1,此判断为防御性编程)if (x <= 0) return false;// 不断将 x 除以 2,直到不能整除为止// 这一步是为了消除 x 中所有的质因数 2while (x % 2 == 0) {x /= 2;}// 不断将 x 除以 5,直到不能整除为止// 这一步是为了消除 x 中所有的质因数 5while (x % 5 == 0) {x /= 5;}// 经过上述两步后,如果 x 变成了 1,// 说明原数的质因数只包含 2 和 5,符合“终止数”的定义。// 如果 x 不等于 1,说明原数还包含其他质因数(如 3, 7, 11 等),不是终止数。return x == 1;}intmain(){int L, R;// 从标准输入读取两个整数 L 和 R,代表区间的左右边界// 如果读取成功,则进入 if 语句块if (cin >> L >> R) {int count = 0; // 用于记录区间 [L, R] 内“终止数”的个数// 遍历区间 [L, R] 内的每一个整数for (int i = L; i <= R; ++i) {// 调用 isTerminating 函数判断当前数字 i 是否为终止数if (isTerminating(i)) {count++; // 如果是,计数器加 1}}// 输出最终统计的数量,并换行cout << count << endl;}return 0; // 程序正常结束}代码思路——
GESP 2026年3月 C++五级 找数
#include<bits/stdc++.h>// 万能头文件,含 unordered_set / sort / vector 等using namespace std;intmain(){// 关闭cin与stdio同步,加速cin输入速度ios::sync_with_stdio(false);// 解绑cin与cout,避免cout刷新拖慢cin读取cin.tie(nullptr);int n, m;cin >> n >> m; // n = 数组 A 长度,m = 数组 B 长度// ========== 1. 把 A 中所有元素放入哈希集合 ==========// 用 long long:虽然本题数值 <= 1e9 在 int 范围内,但养成习惯更安全unordered_set<long long> st;st.reserve(n * 2); // 预分配桶空间,减少 rehash 次数,防止被卡常数st.max_load_factor(0.7); // 降低装载因子,进一步降低哈希冲突概率for (int i = 0; i < n; ++i) {long long x;cin >> x;st.insert(x); // 插入 A 的元素(题目保证 A 内元素互不相同)}// ========== 2. 遍历 B,统计有多少个出现在 A 中 ==========int ans = 0;for (int i = 0; i < m; ++i) {long long x;cin >> x;// find 返回迭代器;若不等于 end() 说明 x 在集合里,即两数组共有if (st.find(x) != st.end()) {++ans;}// 更简洁写法:ans += st.count(x); (count 对 set 只会返回 0 或 1)}// ========== 3. 输出答案 ==========cout << ans << '\n';return 0;}代码思路——
课程体系——
需要无水印PDF格式文件, 或者课程体系咨询, 欢迎扫描下面二维码添加好友垂询。
▍ 声明:本文整理自网络,如有侵权,请联系删除。
本公号刊载此文,是出于合法合理地分享和传播信息,扩大大受众范围,促进学术交流,推动共同进步之目的。公众号持有人郑重声明,本文的发布,将严格遵守相关规定和法律法规,不侵犯任意潜在作者的权益,不改变引用原文(若有)的意图和内容。若有来源标注错误或侵犯了您的合法权益,请随时与我们联系协商,联系(QQ):993225721,我们将及时更正、删除。文章若有幸得到转载,首先,公众号持有人感谢转载人为读者阅读提供了有价值的信息和知识,希望文章能够在被转载的平台上得到更广泛的传播和交流;其次,转载人应充分考虑到转载动作本身所可能带来的相应的风险和责任,包括但不限于侵犯知识产权、侵犯他人权益等行为所引起的法律责任,确保本文的合法传播和使用。同时,本人也极其愿意在转载过程中尽力配合转载人了解、关注、规避、消除相关的潜在风险。若转载人有相任何关疑虑,同样欢迎随时与我们联系协商,联系(QQ):993225721。 喜欢您关注我们哦——















































































