GESP认证C++编程真题解析 | 202512 七级

附上汇总帖:GESP认证C++编程真题解析 | 汇总


单选题

第1题

下面关于C++中形参、实参和定义域的说法中,正确的一项是( )。

A. 形参是函数定义时所指定的变量,它只在函数内部有效。

B. 在函数内部,可以修改传入的形参的值,即使该形参是一个常量引用。

C. 实参和形参的类型必须完全一致,否则会导致编译错误。

D. 使用指针作为形参时,形参是指向实参的地址,因此对该指针赋值会影响实参。

【答案】:A

【解析】

如果函数的形参是常量引用,不能在函数内部修改,B错误。
调用函数时,传入函数的实参如果和形参的类型不一致,则首先会尝试将参数做隐式类型转换,如ceil(2),会将2隐式转换为2.0。可见,实参和形参类型不一致时,不一定会导致编译错误,C错误。
在函数中改变形参的地址值,不影响实参的地址值,但改变形参的地址所指向的变量值,则是可以在函数外也生效的。D错误。

第2题

已知三个序列: s1 = {3, 1, 8, 2, 5, 6, 7, 4}s2 = {1, 5, 1, 8, 6, 4, 7, 5, 6}s3 = {1, 8, 3, 5, 7, 6, 2, 4}。以下哪个序列是它们的最长公共子序列( )。

A. {1, 8, 5, 6}

B. {1, 5, 6, 7}

C. {1, 8, 6}

D. {1, 5, 7, 4}

【答案】:A

【解析】

通过比对可以发现,A、C选项是s1、s2、s3的公共子序列,且A选项的子序列更少,选A。

第3题

现有一个地址区间为 \(0\sim 10\) 的哈希表,当出现冲突情况,会往后找第一个空的地址存储(到 \(10\) 冲突了就从 \(0\) 开始往后),现在要依次存储 \((1,3,5,7,9)\),哈希函数为 \(h(x)=(x^2+x)\ mod\ 11\)。其中 \(9\) 存储在哈希表哪个地址中( )。

A. \(1\)

B. \(2\)

C. \(3\)

D. \(4\)

【答案】:D

【解析】

存储1时,h(1)=2,存入位置2中。
存储3时,h(3)=1,存入位置1中。
存储5时,h(5)=8,存入位置8中。
存入7时,h(7)=1,位置1有元素,向后找到位置3为空,存入位置3中。
存入9时,h(9)=2,位置2、3都有元素,存入位置4中。

第4题

在0/1背包问题中,给定一组物品,每个物品有一个重量和价值,背包的容量有限。假设背包的最大容量为 \(W\),物品的数量为 \(n\),其中第 \(i\) 个物品的重量为 \(w[i]\),价值为 \(v[i]\)。以下关于0/1背包问题的描述,正确的是( )。

A. 在解决0/1背包问题时,使用贪心算法可以保证找到最优解,因为物品只能放入一次。

B. 0/1背包是P问题(多项式时间可解问题),它可以在 \(O(nW)\) 的时间复杂度内解决。

C. 0/1背包问题中,动态规划解法的空间复杂度为 \(O(nW)\),但可以通过滚动数组技巧将空间复杂度优化到 \(O(W)\)

D. 0/1背包问题中,每个物品只能选择一次,并且子问题之间是独立的,无法重用计算结果。

【答案】:C

【解析】

0/1背包属于动态规划问题,使用贪心算法不一定得到最优解,A错误。
0/1背包看似是多项式时间的解法,但并不是P问题,而是NP问题,B错误。
0/1背包问题的解决中,存在重复子问题,因而可以利用动态规划的解法,重用其计算结果,D错误。

第5题

一棵深度为6(根节点深度为1)的完全二叉树,节点总数最少有( )。

A. 31

B. 32

C. 63

D. 64

【答案】:B

【解析】

尽可能少,则应在5层满二叉树的基础上,第6层仅添加一个叶节点,\(2^5-1+1=32\),选B。

第6题

对于如下二叉树,下面关于访问的顺序说法错误的是( )。

image

A. D E B F H J I G C A 是它的后序遍历序列。

B. A B C D E F G H I J 是它的广度优先遍历序列。

C. A B D E C F G H I J 是它的先序遍历序列。

D. D B E A F C H G J I 是它的中序遍历序列。

【答案】:D

【解析】

先序遍历:A B D E C F g H I J
中序遍历:D B E A F C H G I J
后序遍历:D E B F H J I G C A
广度优先遍历:A B C D E F G H I J
D正确。

第7题

下面程序的运行结果为( )。

#include <iostream>

int query(int n, int *a, int x) {
	int l = 0, r = n;
	while (l < r) {
		int mid = l + (r - l) / 2;
		if (a[mid] >= x) r = mid;
		else l = mid + 1;
	}

	if (l == n) return -1;
	return l;
}

int main() {
	int n = 10;
	int x = 3;
	int num[] = {1, 2, 2, 3, 3, 4, 5, 5, 6, 7};

	std::cout << query(n, num, x) << "\n";
	return 0;
}

A. 2

B. 3

C. 4

D. 5

【答案】:B

【解析】

query函数实现了二分查找过程,目标是为了找到大于等于x的最小位置(即第一个大于等于3的位置,即3),选B。

第8题

下面程序中,函数 query 的时间复杂度是( )。

#include <iostream>

int query(int n, int *a, int x) {
	int l = 0, r = n;
	while (l < r) {
		int mid = l + (r - l) / 2;
		if (a[mid] >= x) r = mid;
		else l = mid + 1;
	}

	if (l == n) return -1;
	return l;
}

int main() {
	int n = 10;
	int x = 3;
	int num[] = {1, 2, 2, 3, 3, 4, 5, 5, 6, 7};

	std::cout << query(n, num, x) << "\n";
	return 0;
}

A. \(O(1)\)

B. \(O(logn)\)

C. \(O(n)\)

D. \(O(nlogn)\)

【答案】:B

【解析】

二分查找的时间复杂度为 \(O(logn)\),选B。

第9题

有5个字符,它们出现的次数分别为2次、2次、3次、3次、5次。现在要用哈夫曼编码的方式来为这些字符进行编码,最小加权路径长度WPL(每个字符的出现次数 它的编码长度,再把每个字符结果加起来)的值为( )。

A. 30

B. 34

C. 43

D. 47

【答案】:B

【解析】

假设5个字符是a,b,c,d,e,构成的哈夫曼树如下:

image

计算是WPL为 2 * 3 + 2 * 3 + 3 * 2 + 3 * 2 + 5 * 2 = 34,选B。

第10题

下面程序的运行结果为( )。

#include <iostream>
using namespace std;
int f(int n) {
	if (n <= 2) return n * 2;
	return f(n - 1) + f(n - 2);
}
int main() {
	cout << f(5) << endl;
	return 0;
}

A. 10

B. 16

C. 26

D. 30

【答案】:B

【解析】

f(1)=2, f(2)=4, f(3)=6, f(4)=10, f(5)=16,选B。

第11题

一个简单无向图 \(G\) 有36条边,且每个顶点的度数都为4,则图 \(G\) 的顶点个数为( )。

A. 9

B. 12

C. 18

D. 36

【答案】:C

【解析】

无向图中,每增加一条边,就有两个点的度数分别加1。因此,无向图中结点的度数之和=边数的2倍。解得n=18,选C。

第12题

下面关于二叉树的说法正确的是( )。

A. 任意二叉树的中序遍历与后序遍历必定不相同。

B. 对任意二叉树,若已知先序遍历与后序遍历,则该二叉树唯一确定。

C. 若二叉树有 \(n\) 个结点,根节点高度为 \(1\),则其高度满足: \(\lceil log_2(n+1)\rceil\le h\le n\)

D. 在二叉树的先序遍历中,根后紧跟的结点一定是根的左孩子。

【答案】:C

【解析】

如果只有一个根节点时,其所有遍历都是相同的,A错误。

已知先序和后序,是无法确定的,B错误。

n个结点的二叉树,其为完全二叉树时,高度最小,即为 \(\lceil log_2(n+1)\rceil\),其为联时,高度最大,即为n。C正确。

左儿子不存在时,遍历的是根的右儿子,D错误。

第13题

假设一个算法时间复杂度的递推式是 \(T(n)=8T(\frac{n}{4})+n\sqrt n\)\(n\) 为正整数),和 \(T(0)=1\),那么这个算法的时间复杂度是( )。

A. \(O(n\sqrt n)\)

B. \(O(n\sqrt nlogn)\)

C. \(O(n^2)\)

D. \(O(n^2logn)\)

【答案】:B

【解析】

第一层中,本身需要 \(n\sqrt n\) 的时间,第二层中,本身需要时间为 \(\frac{n}{4}\sqrt \frac{n}{4}\) ,共8次调用,则为 \(8\times \frac{n}{4}\times \frac{\sqrt n}{2}=n\sqrt n\)
递归层数是 \(O(logn)\),所以答案选B。

第14题

下面哪一个可能是下图的深度优先遍历序列( )。

image

A. 1, 5, 6, 3, 2, 8, 9, 4, 7

B. 1, 5, 8, 9, 7, 4, 6, 3, 2

C. 3, 2, 1, 4, 7, 6, 9, 5, 8

D. 2, 5, 6, 3, 8, 7, 9, 4, 1

【答案】:B

【解析】

从1、3、2结点按图遍历后,只有B正确。

第15题

下面这个有向图的强连通分量的个数是( )。

image

A. 3

B. 4

C. 5

D. 6

【答案】:C

【解析】

通过反复缩圈,将一个有向环视作一个“大点”,简化全图。最后划分为:{1, 2}, {4, 5, 7, 8}, {6, 9, 10, 11}, {3} 和 {12},选C。

判断题

第1题

C++语言中,表达式 3 ^ 2 的结果类型为 int ,值为 9

A. 正确

B. 错误

【答案】:B

【解析】

^ 表示异或运算,结果为1,不能理解为幂运算。

第2题

使用 cmath 头文件中的正弦函数,表达式 sin(90) 的结果类型为 double ,值约为 1.0

A. 正确

B. 错误

【答案】:B

【解析】

函数sin(x)的作用是:对弧度制的角x,求对应的数学函数的值。实参应为 90° 的弧度制,约为 \(\frac{\pi}{2}\),而不能直接传入角度制的参数。

第3题

使用 strcmp("10", "9") 比较两个字符串,返回值大于0,说明 "10""9" 大。

A. 正确

B. 错误

【答案】:B

【解析】

strcmp是比较字符串的字典序,“10”的字典序小于“9”

第4题

选择排序是一种不稳定的排序算法,而冒泡排序是一种稳定的排序算法。

A. 正确

B. 错误

【答案】:A

【解析】

选择排序,如果序列元素全部相同,选择排序过程会导致相同元素的顺序发生改变。冒泡排序每次检查相邻两个元素,只有满足给定的排序条件,才将相邻两个元素交换,因此相同元素一定不会交换至另一个元素的后方。因此,冒泡排序是稳定的。

第5题

求两个长度为 \(n\) 序列的最长公共子序列(LCS)长度时,可以使用滚动数组将空间复杂度从 \(O(n^2)\) 优化到 \(O(n)\)

A. 正确

B. 错误

【答案】:A

【解析】

f[i][j]表示s[1-i]t[1-j]的LCS,其只与前一行的f[i-1][j],f[i-1][j-1],以及本行的左侧f[i][j-1]有关,因此可使用滚动数组f[2][N],状态转移时,只需第一维除以2的余数,即f[i%2][j]

第6题

在无向图中,所有顶点的度数之和等于边数的两倍。

A. 正确

B. 错误

【答案】:A

【解析】

在无向图中,每增加一条边,就有两个点的度数分别加1。因此,无向图中结点的度数之和 = 边数的2倍。

第7题

使用邻接矩阵存储一个有 \(V\) 个顶点、\(E\) 条边的图,对该图进行一次完整的BFS遍历,时间复杂度为 \(O(V+E)\)

A. 正确

B. 错误

【答案】:B

【解析】

如果使用邻接矩阵存储图,每遍历到一个点时,枚举其出边的时间复杂度不是其出边的数量,而是固定的 \(O(V)\),则对所有点枚举出现的总时间复杂度就会达到 \(O(V^2)\)

第8题

在图像处理或游戏开发中,泛洪(flood fill)算法既可以用BFS实现,也可以用DFS实现。

A. 正确

B. 错误

【答案】:A

【解析】

泛洪算法只是一种处理思路,实现上既可以使用DFS,又可以使用BFS。

第9题

使用链地址法处理冲突的哈希表,当所有元素都映射到同一个槽位时,查找操作的最坏时间复杂度为 \(O(n)\),其中 \(n\) 为元素个数。

A. 正确

B. 错误

【答案】:A

【解析】

当所有的n个元素都映射到同一个槽位时,该槽位的链表恰有n个元素,最坏情况下,时间复杂度为 \(O(n)\)

第10题

一个包含 \(V\) 个顶点的连通无向图,其任何一棵生成树都恰好包含 \(V-1\) 条边。

A. 正确

B. 错误

【答案】:A

【解析】

生成树也是树,V 个点的树一定有恰好 V-1 条边。

编程题

题解:洛谷 P14921 [GESP202512 七级] 城市规划

题解:洛谷 P14922 [GESP202512 七级] 学习小组

posted @ 2026-07-17 13:40  团爸讲算法  阅读(11)  评论(0)    收藏  举报