GESP 2026年3月_C++八级试卷

从PDF导入:GESP 2026年3月_C++八级试卷

C++ 180分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
某班级有8名男生和6名女生,现要选出3人组成学习小组,要求小组中至少有1名男生和1名女生,则不同的选法共有( )种。
A. 112
B. 168
C. 224
D. 288
第2题 中级 2.0分 单选
在杨辉三角中,从第0行开始计数,第10行的所有数之和为( )。
A. 512
B. 1024
C. 2048
D. 4096
第3题 中级 2.0分 单选
下列代码实现了快速幂算法,其时间复杂度为( )。

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)
B. O(loge)
C. O(logmod)
D. O(e)
第4题 中级 2.0分 单选
从5本不同的数学书和4本不同的物理书中选取3本书,要求至少包含1本数学书,则不同的选法有( )种。
A. 60
B. 74
C. 80
D. 84
第5题 中级 2.0分 单选
在二叉搜索树(BST)中,若中序遍历的序列为{1,2,3,4,5},且先序遍历的第一个序列元素为3,则下列说法正确的是( )。
A. 该树一定是一棵完全二叉树
B. 元素4和5不可能是兄弟节点
C. 元素1所在节点的深度可能大于3(根节点深度为1)
D. 元素2一定是元素1的父节点
第6题 中级 2.0分 单选
在一个有向带权图中,使用Dijkstra算法求单源最短路时,若使用优先队列(小根堆)优化,其时间复杂度为( )。
A. O(V²)
B. O(V·E)
C. O((V+E)logV)
D. O(V²logV)
第7题 中级 2.0分 单选
对于含n个顶点(n≥2)的连通加权有向图,若图中不存在负权环,则任意两点之间的最短路径(简单路径)最多包含( )条边。
A. n
B. n-1
C. n+1
D. 无法确定,取决于图的具体边数
第8题 中级 2.0分 单选
在使用Floyd算法求任意两点间最短路径时,时间复杂度为O(V³)。若在某次算法执行前,已经用Dijkstra算法正确求出了所有点对的最短路并存入了dist数组如果此时继续对该 dist 数组执行一次完整的 Floyd 算法过程 (无任何提前终止),执行完毕后 dist 数组内的值( )。
A. 会发生改变,因为Floyd又做了一次松弛
B. 不会发生改变
C. 可能变大,因为未针对已有最短路优化
D. 可能在某些负权图中陷入死循环
第9题 中级 2.0分 单选
关于图论中的最短路径算法,下列说法中严格正确的是( )。
A. Dijkstra算法能够高效处理包含负权边的有向图
B. Floyd算法可以求出任意两点间的最短路径,且允许图中存在负权边(但不能有负权环)
C. 单源最短路径算法无法用于无向图,无向图只能通过BFS求解
D. Dijkstra算法的每一步必定从当前未访问的节点中,选取距离起始点最远的节点进行松弛操作
第10题 中级 2.0分 单选
有6个人排成一排照相,其中甲、乙两人必须相邻,且丙不能站在排头的不同排法有( )种。
A. 120
B. 144
C. 192
D. 240
第11题 中级 2.0分 单选
下列代码试图实现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]
B. dist[i][k]!=INF&&dist[k][j]!=INF
C. dist[i][k]!=INF&&dist[k][j]!=INF&&dist[i][k]+dist[k][j]
D. dist[i][j]==INF
第12题 中级 2.0分 单选
用数字0、1、2、3、4组成无重复数字的五位偶数,共有( )个。
A. 48
B. 60
C. 72
D. 96
第13题 中级 2.0分 单选
在一个无向带权图中,若使用Prim算法从顶点0开始构造最小生成树(边权均为正整数,且graph[u][v]==0表示无边),下列代码中横线处应填入( )。

for (int v = 0; v < n; v++) {
if (______) {
minEdge[v] = graph[u][v];
parent[v] = u;
}
}

A. graph[u][v]&&!inMST[v]&&graph[u][v]
B. !inMST[v]&&graph[u][v]
C. graph[u][v]>0&&!inMST[v]
D. !inMST[v]&&minEdge[v]>0
第14题 中级 2.0分 单选
已知三个点A(x1,y1)、B(x2,y2)、C(x3,y3)在平面直角坐标系中的坐标。下列C++表达式中,在精度误差范围1e-8内能正确判断这三个点是否三点共线的表达式是( )。
A. (x2-x1)/(y2-y1)==(x3-x1)/(y3-y1)
B. (x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)==0
C. fabs((x2-x1)*(y3-y1)-(x3-x1)*(y2-y1))<1e-8
D. fabs((x2-x1)/(y2-y1)-(x3-x1)/(y3-y1))<1e-8
第15题 中级 2.0分 单选
在64位操作系统下(LP64/LLP64模型),下面代码的输出结果是( )。

#include
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
第16题 中级 2.0分 判断
在C++中,若结构体中包含一个static成员变量,则该变量的存储空间属于结构体对象的一部分。
T. 正确
F. 错误
第17题 中级 2.0分 判断
对于任意正整数n,二项式(a+b)^n展开式中各项的二项式系数之和等于2^n。
T. 正确
F. 错误
第18题 中级 2.0分 判断
在C++中,若函数参数类型为const int&,则该参数既可以绑定左值,也可以绑定右值。
T. 正确
F. 错误
第19题 中级 2.0分 判断
若一个无向图的最小生成树唯一,则图中所有边权必定各不相同。
T. 正确
F. 错误
第20题 中级 2.0分 判断
使用快速排序对n个元素进行排序时,无论最好、最坏还是平均情况,时间复杂度均为O(nlogn)。
T. 正确
F. 错误
第21题 中级 2.0分 判断
若一个图中所有顶点的度数为偶数,则一定存在欧拉回路。
T. 正确
F. 错误
第22题 中级 2.0分 判断
使用倍增法预处理区间最值问题时,预处理的时间复杂度为O(nlogn),查询的时间复杂度为O(1)。
T. 正确
F. 错误
第23题 中级 2.0分 判断
如果将一个连通无向图G1中所有边的权值都统一增加同一个正整数常数C,形成图G2。则G1的最小生成树中每条边在G2中对应的边组成的树,一定是G2的最小生成树。
T. 正确
F. 错误
第24题 中级 2.0分 判断
在图论算法中,Kruskal算法和Prim算法都可以用来求解最小生成树,且这两者的贪心策略无论在任何连通无向图上求得的最小生成树总边权和必定相同。
T. 正确
F. 错误
第25题 中级 2.0分 判断
在动态规划问题中,"状态转移方程+递推"和"递归+记忆化搜索"通常是解决同一问题的两种不同实现方式,它们的时间复杂度总是相同的。
T. 正确
F. 错误
第26题 中级 25.0分 编程
消息查找

时间限制:1.0s 内存限制:512.0MB
小A的消息记录中有n条消息,依次以1,2,...,n编号。编号小的消息发送时间早于编号大的消息。
一条消息可以引用一条编号小于它的消息,也可以不引用消息。
消息记录的一个例子是:
【消息1】小A:有人做了今天的第一题吗?

【消息2】小A:我第一题WA了,可能是什么原因?

【消息3:引用消息1】小B:我我我

【消息4:引用消息2】小C:我也WA了

【消息5:引用消息2】小B:是不是没开long long?

【消息6:引用消息5】小A:改了就AC了,太厉害了!
对于消息i(1≤i≤n),小A以ri标记消息i是否有引用。如果ri>0,则消息i为引用了消息ri;如果ri=0,则消息i没有引用消息。
消息查找工具任意时刻只能定位恰好一条消息。如果当前位于消息i(1小A有q次询问。在第k次询问中,小A给出消息编号xk、yk(yk

【输入格式】
第一行,两个正整数n、q。第二行,n个非负整数r₁,r₂,...,rₙ。接下来q行描述询问。
【输出格式】
输出q行,每行一个整数,表示从消息xk切换到消息yk所需的最少操作次数。
【样例输入1】
6 3
0 0 1 2 2 5
4 1
6 2
6 3
【样例输出1】
3
4
3
对于所有测试点,保证1≤n≤10⁵,1≤q≤10⁵,0≤ri<i,1≤yk<xk≤n,保证至多有1000条引用消息。
第27题 中级 25.0分 编程
子图最短路

时间限制:1.0s 内存限制:512.0MB
给定包含n个结点m条边的带权无向图G,结点依次以1,2,...,n编号。
第i(1≤i≤m)条边连接编号为ui与vi的两个结点,权值为wi。
对于指定的1≤l≤r≤n,按以下方式构造图G的子图G(l,r):
保留G中编号在区间[l,r]中的结点。删去其它编号不在[l,r]中的结点以及与之相连的边。
对于G(l,r)中的任意结点u,v应有l≤u,v≤r。记u,v在子图G(l,r)上的最短距离为d(l,r,u,v)。
特殊地,若u,v在子图G(l,r)上不连通,则认为d(l,r,u,v)=∞。
你需要求出∑₁ₗ₌₁ⁿ∑ᵤ₌ₗʳd(l,r,u,v)对10⁹取模的结果。

【输入格式】
第一行,两个正整数n、m。接下来m行描述边。
【输出格式】
输出一行,一个整数,表示结果对10⁹取模的值。
【样例输入1】
3 2
1 2 1
2 3 2
【样例输出1】
8
对于所有测试点,保证2≤n≤100,2≤m≤n,1≤ui,vi≤n,1≤wi≤10⁹。图中可能存在重边。
💬