GESP C++ 7级 2025.12
下⾯关于 C++ 中形参、实参和定义域的说法中,正确的⼀项是( )。
形参是函数定义时所指定的变量,它只在函数内部有效。
在函数内部,可以修改传⼊的形参的值,即使该形参是⼀个常量引⽤。
实参和形参的类型必须完全⼀致,否则会导致编译错误。
使⽤指针作为形参时,形参是指向实参的地址,因此对该指针赋值会影响实参。
已知三个序列:
s₁ = {3, 1, 8, 2, 5, 6, 7, 4},
s₂ = {1, 5, 1, 8, 6, 4, 7, 5, 6},
s₃ = {1, 8, 3, 5, 7, 6, 2, 4}。
以下哪个序列是它们的最长公共⼦序列( )。
{1, 8, 5, 6}
{1, 5, 6, 7}
{1, 8, 6}
{1, 5, 7, 4}
现有一个地址区间为 的哈希表,当出现冲突情况,会往后找第一个空的地址存储(到 冲突了就从 开始往后),现在要依次存储 ,哈希函数为 。其中 存储在哈希表哪个地址中( )。
1
2
3
4
在 0/1 背包问题中,给定一组物品,每个物品有一个重量和价值,背包的容量有限。假设背包的最大容量为 ,物品的数量为 ,其中第 个物品的重量为 ,价值为 。以下关于 0/1 背包问题的描述,正确的是( )。
在解决 0/1 背包问题时,使用贪心算法可以保证找到最优解,因为物品只能放入一次。
0/1 背包是 P 问题(多项式时间可解问题),它可以在 的时间复杂度内解决。
0/1 背包问题中,动态规划解法的空间复杂度为 ,但可以通过滚动数组技巧将空间复杂度优化到 。
0/1 背包问题中,每个物品只能选择一次,并且子问题之间是独立的,无法重用计算结果。
⼀棵深度为 (根节点深度为 )的完全⼆叉树,节点总数最少有( )。
31
32
63
64
对于如下⼆叉树,下⾯关于访问的顺序说法错误的是( )。

D E B F H J I G C A 是它的后序遍历序列
A B C D E F G H I J 是它的广度优先遍历序列
A B D E C F G H I J 是它的先序遍历序列
D B E A F C H G J I 是它的中序遍历序列
下⾯程序的运⾏结果为( )。
#include
int query(int n, int *a, int x) {
int l = 0, r = n;
while (l = 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;
}
2
3
4
5
下⾯程序中,函数 query 的时间复杂度是( )。
#include
int query(int n, int *a, int x) {
int l = 0, r = n;
while (l = 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;
}
有 个字符,它们出现的次数分别为 次、 次、 次、 次、 次。现在要⽤哈夫曼编码的⽅式来为这些字符进⾏编码,最⼩加权路径长度 (每个字符的出现次数 它的编码长度,再把每个字符结果加起来)的值为( )。
30
34
43
47
下⾯程序的运⾏结果为( )。
#include
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;
}
10
16
26
30
