GESP 客观题评测系统

2026-03-Level-8

2026-03-Level-8

试卷解析总览,可直接查看每题答案与解析。

单选题(每题 2 分)

1 题(单选题

某班级有8名男生和6名女生,现要选出3人组成学习小组,要求小组中至少有1名男生和1名女生,则不同的选法共有()种。

A.
112
B.
168
C.
224
D.
288

正确答案D

解析详情

【答案】D

【考点】排列组合(间接计数法)

【解析】 从14人中任选3人的总数为 C(14,3) = (14*13*12)/(3*2*1) = 364。不符合条件的选法包括:全是男生 C(8,3) = 56,全是女生 C(6,3) = 20。符合要求的选法共有 364 - 56 - 20 = 288 种。

【易错点】 直接分类讨论(1男2女或2男1女)容易在计算组合数时出错,间接法更简洁。

2 题(单选题

在杨辉三角中,从第0行开始计数,第10行的所有数之和为()。

A.
512
B.
1024
C.
2048
D.
4096

正确答案B

解析详情

【答案】B

【考点】杨辉三角与二项式定理

【解析】 根据二项式系数性质,杨辉三角第 n 行所有数之和等于 2^n。本题中 n = 10,则和为 2^10 = 1024。

【易错点】 混淆行号的起始位置(从0开始还是从1开始)。

3 题(单选题

下列代码实现了快速幂算法,其时间复杂度为()。

long long fastPow(long long b, long long e, long long mod) {
    long long result = 1;
    while (e > 0) {
        if (e & 1)
            result = result * b % mod;
        b = b * b % mod;
        e >>= 1;
    }
    return result;
}
A.
O(logb)O(\log b)
B.
O(loge)O(\log e)
C.
O(logmod)O(\log mod)
D.
O(e)O(e)

正确答案B

解析详情

【答案】B

【考点】快速幂算法、时间复杂度分析

【解析】 快速幂算法中,循环变量 e 每次循环都会执行右移操作(e >>= 1),相当于每次减半。循环执行的次数取决于指数 e 的二进制位数,即 log2(e),因此时间复杂度为 O(log e)。

【易错点】 误选 O(log b),b 是底数,其大小不影响循环次数。

4 题(单选题

从5本不同的数学书和4本不同的物理书中选取3本书,要求至少包含1本数学书,则不同的选法有()种。

A.
60
B.
74
C.
80
D.
84

正确答案C

解析详情

【答案】C

【考点】排列组合(补集思想)

【解析】 从总共 9 本书中选 3 本的总选法为 C(9,3) = (9*8*7)/(3*2*1) = 84。不符合条件的选法是“完全没有数学书”,即全部选物理书,选法为 C(4,3) = 4。因此符合要求的选法有 84 - 4 = 80 种。

【易错点】 遗漏“至少包含1本数学书”中的多种分类情况,或在使用分类讨论时计算重复。

5 题(单选题

在二叉搜索树(BST)中,若中序遍历的序列为 \{1, 2, 3, 4, 5\} ,且先序遍历的第一个序列元素为 3,则下列说法正确的是()。

A.
该树一定是一棵完全二叉树
B.
元素4和5不可能是兄弟节点
C.
元素1所在节点的深度可能大于3(根节点深度为1)
D.
元素2一定是元素1的父节点

正确答案B

解析详情

【答案】B

【考点】二叉搜索树(BST)的性质、遍历转换

【解析】 由先序第一个元素为3可知3是根节点。中序序列中,3左侧为{1,2}(构成左子树),右侧为{4,5}(构成右子树)。在右子树中只有两个节点4和5,无论谁是子树根,另一个必然是其子节点,不可能互为兄弟。C选项中,左子树最多3层(根3,子2,孙1),深度不可能大于3。

【易错点】 忽略中序序列在根节点左右两侧划定的子树范围约束。

6 题(单选题

在一个有向带权图中,使用Dijkstra算法求单源最短路时,若使用优先队列(小根堆)优化,其时间复杂度为()。

A.
O(V2)O(V^2)
B.
O(VE)O(V \cdot E)
C.
O((V+E)logV)O((V + E) \log V)
D.
O(V2logV)O(V^2 \log V)

正确答案C

解析详情

【答案】C

【考点】Dijkstra算法、堆优化、复杂度分析

【解析】 在使用优先队列优化的 Dijkstra 算法中,每个顶点入队一次,每条边可能导致一次优先队列的更新(松弛操作)。队列操作的时间复杂度为 log V,因此总复杂度为 O((V + E) log V)。

【易错点】 误选 O(V^2),那是未优化版本(邻接矩阵实现)的复杂度。

7 题(单选题

对于含n个顶点(n \geq 2)的连通加权有向图,若图中不存在负权环,则任意两点之间的最短路径(简单路径)最多包含( )条边。

A.
nn
B.
n1n - 1
C.
n+1n + 1
D.
无法确定,取决于图的具体边数

正确答案B

解析详情

【答案】B

【考点】图论最短路径性质、简单路径概念

【解析】 在没有负权环的图中,任意两点间的最短路径一定是一条简单路径。简单路径不包含重复的顶点,包含 n 个顶点的图中,一条简单路径最多只能经过所有 n 个顶点,对应的边数最多为 n - 1。

【易错点】 混淆顶点数和边数的关系,或错误地将环计算在内。

8 题(单选题

在使用Floyd算法求任意两点间最短路径时,时间复杂度为 O(V^{3}) 。若在某次算法执行前,已经用Dijkstra算法正确求出了所有点对的最短路并存入了dist数组。如果此时继续对该dist数组执行一次完整的Floyd算法过程(无任何提前终止),执行完毕后dist数组内的值()。

A.
会发生改变,因为 Floyd 又做了一次松弛
B.
不会发生改变
C.
可能变大,因为未针对已有最短路优化
D.
可能在某些负权图中陷入死循环

正确答案B

解析详情

【答案】B

【考点】Floyd算法、最短路松弛性质

【解析】 Floyd 算法的核心是 dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])。如果 dist 数组已经存储了所有点对的最短路,则根据最短路的三角不等式性质,dist[i][j] 恒小于等于 dist[i][k] + dist[k][j],松弛操作不会使值变小,因此数组内容保持不变。

【易错点】 误以为再次执行算法会因为“多重迭代”导致结果偏移。

9 题(单选题

关于图论中的最短路径算法,下列说法中严格正确的是()。

A.
Dijkstra 算法能够高效处理包含负权边的有向图。
B.
Floyd 算法可以求出任意两点间的最短路径,且允许图中存在负权边(但不能有负权环)。
C.
单源最短路径算法无法用于无向图,无向图只能通过 BFS 求解。
D.
Dijkstra 算法的每一步必定从当前未访问的节点中,选取距离起始点最远的节点进行松弛操作。

正确答案B

解析详情

【答案】B

【考点】图论算法综合对比(Dijkstra, Floyd, BFS)

【解析】 A项错在 Dijkstra 不能处理负权边;C项错在无向图可视为双向有向图应用最短路算法;D项错在 Dijkstra 选取的是距离起点“最近”而非“最远”的节点。B项正确描述了 Floyd 算法处理负权边(非负权环)的能力。

【易错点】 混淆 Dijkstra 的贪心策略及其对负权边的局限性。

10 题(单选题

有6个人排成一排照相,其中甲、乙两人必须相邻,且丙不能站在排头的不同排法有()种。

A.
120
B.
144
C.
192
D.
240

正确答案C

解析详情

【答案】C

【考点】排列组合(捆绑法、排除法)

【解析】 先用捆绑法,将甲乙视作整体:5个元素全排列 A(5,5)=120,内部甲乙排列 A(2,2)=2,总数 120*2=240。再排除丙在排头的情况:丙固定在头,剩余4个元素(含甲乙捆绑体)全排列 A(4,4)=24,乘以内部 A(2,2)=2 得到 48。符合要求的排法为 240 - 48 = 192。

【易错点】 计算甲乙相邻时忘记计算甲乙内部的相互位置排列。

11 题(单选题

下列代码试图实现Floyd算法求所有点对之间的最短路径,横线处应填入()。

void floyd(int n, int dist[][MAXN]) {
    for (int k = 0; k < n; k++)
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                if (_____) // 在此处填入选项
                    dist[i][j] = dist[i][k] + dist[k][j];
}
A.
dist[i][k] + dist[k][j] < dist[i][j]
B.
dist[i][k] != INF && dist[k][j] != INF
C.
dist[i][k] != INF && dist[k][j] != INF && dist[i][k] + dist[k][j] < dist[i][j]
D.
dist[i][j] == INF

正确答案C

解析详情

【答案】C

【考点】Floyd算法实现细节

【解析】 Floyd 算法的松弛条件必须包含:1. 中转路径 i->k 和 k->j 必须连通(不为 INF),以防溢出或逻辑错误;2. 中转后的总距离必须小于当前已知的 i->j 距离。C 选项完整包含了这两个必要条件。

【易错点】 忽略 INF 连通性检查,可能导致整数加法溢出导致错误的松弛操作。

12 题(单选题

用数字0、1、2、3、4组成无重复数字的五位偶数,共有( )个。

A.
48
B.
60
C.
72
D.
96

正确答案B

解析详情

【答案】B

【考点】排列组合(分类计数、首位不为0约束)

【解析】 分类讨论。1.个位为0:剩余4位全排列 A(4,4)=24。2.个位为2:首位不能为0且不能为2,有3种选择,剩余3位全排列 A(3,3)=6,共 3*6=18。3.个位为4:同个位为2,也有18种。总数:24 + 18 + 18 = 60。

【易错点】 计算个位不为0的情况时,忽略了首位不能填0的限制条件。

13 题(单选题

在一个无向带权图中,若使用 Prim 算法从顶点 0 开始构造最小生成树(边权均为正整数,且 graph[u][v] == 0 表示无边),下列代码中横线处应填入()。

int prim(vector<vector<int>>& graph, int n) {
    vector<bool> inMST(n, false);
    vector<int> minEdge(n, INT_MAX);
    minEdge[0] = 0;
    int result = 0;
    for (int i = 0; i < n; i++) {
        int u = -1;
        for (int j = 0; j < n; j++)
            if (!inMST[j] && (u == -1 || minEdge[j] < minEdge[u]))
                u = j;
        inMST[u] = true;
        result += minEdge[u];
        for (int v = 0; v < n; v++)
            if (_____) // 在此处填入选项
                minEdge[v] = graph[u][v];
    }
    return result;
}
A.
graph[u][v] && !inMST[v] && graph[u][v] < minEdge[v]
B.
!inMST[v] && graph[u][v] < minEdge[v]
C.
graph[u][v] > 0 && !inMST[v]
D.
!inMST[v] && minEdge[v] > 0

正确答案A

解析详情

【答案】A

【考点】Prim算法原理、贪心更新策略

【解析】 Prim 算法在确定一个新的顶点 u 加入 MST 后,需要更新与其相邻且未加入 MST 的顶点 v 的最小边权(minEdge[v])。条件应为:1. u 与 v 之间有边(graph[u][v] != 0);2. v 未入树(!inMST[v]);3. 新边权小于当前 minEdge[v]。A 选项满足全部条件。

【易错点】 忽略对 graph[u][v] 是否存在的判断,或未比较新旧边权的大小。

14 题(单选题

已知三个点 A(x_{1}, y_{1}), B(x_{2}, y_{2}), C(x_{3}, y_{3}) 在平面直角坐标系中的坐标。下列 C++ 表达式中,在精度误差范围 1e-8 内能正确计算判断这三个点是三点共线的表达式是()。

A.
(x2x1)/(y2y1)=(x3x1)/(y3y1)(x2-x1)/(y2-y1) = (x3-x1)/(y3-y1)
B.
(x2x1)(y3y1)(x3x1)(y2y1)=θ(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1) = \theta
C.
fabs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)) < 1e-8
D.
fabs((x2-x1)/(y2-y1)-(x3-x1)/(y3-y1)) < 1e-8

正确答案C

解析详情

【答案】C

【考点】三点共线判定、浮点数精度处理

【解析】 三点共线可转化向量 AB 和 AC 的叉积为 0,即 (x2-x1)*(y3-y1)-(x3-x1)*(y2-y1) == 0。在 C++ 浮点运算中,不能直接使用 == 判断,应使用绝对值函数 fabs 与极小值 epsilon 比较。同时应避免除法运算以防分母为 0。

【易错点】 使用除法计算斜率,未考虑垂直于坐标轴导致分母为 0 的情况。

15 题(单选题

在64位操作系统下(LP64 / LLP64 模型),下面代码的输出结果是()。

#include <iostream>
using namespace std;

int main() {
    int a[4] = {1, 2, 3, 4};
    int (*p)[4] = &a;
    int *q = a;

    cout << sizeof(a) << " ";
    cout << sizeof(p) << " ";
    cout << sizeof(p + 1) << " ";
    cout << sizeof(q + 1) << " ";
    cout << (p + 1) - p << " ";
    cout << (q + 1) - q << endl;
}
A.
16 8 8 8 1 1
B.
16 8 16 8 1 1
C.
16 8 8 4 4 1
D.
16 8 8 8 4 1

正确答案A

解析详情

【答案】A

【考点】指针运算、sizeof 运算符、64位内存布局

【解析】 64位下指针大小为8。sizeof(a) 为数组总大小 16;sizeof(p), sizeof(p+1), sizeof(q+1) 均为指针大小 8。指针减法结果是相隔的元素个数:p 是数组指针,加 1 移动 1 个数组距离,差值为 1;q 是 int 指针,加 1 移动 1 个 int 距离,差值也为 1。

【易错点】 误以为指针减法返回的是字节差。在 C++ 中,指针相减的结果是单位距离(元素个数)。

判断题(每题 2 分)

1 题(判断题

在 C++ 中,若结构体中包含一个 static 成员变量,则该变量的存储空间属于结构体对象的一部分。()

正确答案错误

解析详情

【答案】错误

【考点】C++ 静态成员变量存储机制

【解析】 静态成员变量(static)存储在静态存储区,被该结构体的所有对象共享。它不占据具体对象的内存空间,sizeof 计算对象大小时不包含静态成员。

【易错点】 混淆普通成员变量与静态成员变量的生命周期与存储位置。

2 题(判断题

对于任意正整数 n,二项式 (a + b)^n 展开式中各项的二项式系数之和等于 2^n 。()

正确答案正确

解析详情

【答案】正确

【考点】二项式系数性质

【解析】 令 a = b = 1 代入 (a + b)^n 的二项式展开式,得到 C(n,0) + C(n,1) + ... + C(n,n) = (1 + 1)^n = 2^n。这是组合数学的基本恒等式。

【易错点】 无。

3 题(判断题

在 C++ 中,若函数参数类型为 const int &,则该参数既可以绑定左值,也可以绑定右值。()

正确答案正确

解析详情

【答案】正确

【考点】C++ 常量左值引用性质

【解析】 常量左值引用(const T&)是万能引用,既可以绑定普通的左值,也可以绑定右值(临时变量),并能延长该右值的生命周期。

【易错点】 误以为只有右值引用(&&)才能绑定右值。

4 题(判断题

若一个无向图的最小生成树唯一,则图中所有边权必定各不相同。()

正确答案错误

解析详情

【答案】错误

【考点】最小生成树唯一性条件

【解析】 “边权互不相同”是 MST 唯一的充分不必要条件。即便图中存在相同的边权,只要它们不参与 MST 的替换竞争(例如不在同一个环中),MST 依然可能是唯一的。

【易错点】 混淆充分条件与必要条件的关系。

5 题(判断题

使用快速排序对 n 个元素进行排序时,无论最好、最坏还是平均情况,时间复杂度均为 O(n \log n) 。()

正确答案错误

解析详情

【答案】错误

【考点】快速排序时间复杂度分析

【解析】 快速排序的最好和平均时间复杂度为 O(n log n),但在最坏情况下(如数据完全有序且选取固定基准),时间复杂度会退化到 O(n^2)。

【易错点】 误将归并排序或堆排序的稳定性(复杂度一致性)记在快排上。

6 题(判断题

若一个图中所有顶点的度数为偶数,则一定存在欧拉回路。()

正确答案错误

解析详情

【答案】错误

【考点】欧拉回路的存在条件

【解析】 欧拉回路存在的充分必要条件是:1. 图必须是连通的(除孤立点外);2. 所有顶点的度数均为偶数。若图不连通,即便度数均为偶数也无法构成单一回路。

【易错点】 忽略了图论定理中隐含的“连通性”前提。

7 题(判断题

使用倍增法预处理区间最值问题时,预处理的时间复杂度为 O(n \log n) ,查询的时间复杂度为 O(1) 。()

正确答案正确

解析详情

【答案】正确

【考点】RMQ问题、ST表(倍增法)

【解析】 ST表(Sparse Table)采用倍增思想。预处理涉及 n log n 个状态的计算。查询时通过对两个重叠区间的覆盖,可在 O(1) 时间内得出结果。

【易错点】 误以为查询需要 log n 复杂度,那是线段树或树状数组的特征。

8 题(判断题

如果将一个连通无向图 G_1 中所有边的权值都统一增加同一个正整数常数 C,形成图 G_2 。则 G_1 的最小生成树中每条边在 G_2 中对应的边组成的树,一定是 G_2 的最小生成树。()

正确答案正确

解析详情

【答案】正确

【考点】最小生成树性质、Kruskal算法原理

【解析】 根据 Kruskal 算法,MST 选边的逻辑完全依赖于边权值的相对大小顺序。所有边权统一增加一个常数后,原有的权值大小排列顺序(全序关系)不发生任何改变,因此选边结果一致。

【易错点】 误以为增加常数会改变边与边之间的优先级竞争。

9 题(判断题

在图论算法中,Kruskal算法和Prim算法都可以用来求解最小生成树,且这两者的贪心策略无论在任何连通无向图上求得的最小生成树总边权和必定相同。()

正确答案正确

解析详情

【答案】正确

【考点】最小生成树(MST)定义与一致性

【解析】 虽然 Kruskal 和 Prim 的算法执行过程不同,但它们都是求解同一个数学对象——最小生成树。同一个连通图的所有 MST 的总边权和必然是相等的最小值。

【易错点】 无。

10 题(判断题

在动态规划问题中,“状态转移方程+递推”和“递归+记忆化搜索”通常是解决同一问题的两种不同实现方式,它们的时间复杂度总是相同的。()

正确答案错误

解析详情

【答案】错误

【考点】动态规划实现方式对比

【解析】 虽然两者通常处于同一数量级,但“总是相同”过于绝对。递推是自底向上遍历所有状态;而记忆化搜索从顶向下,利用递归剪枝可能只访问计算最终结果所必需的子状态子集,实际执行效率和访问的状态数可能更优。

【易错点】 混淆理论复杂度量级与实际运行时的状态访问空间。