#GESPK202603C8. 八级理论
八级理论
一、单选题(每题 2 分,共 30 分)
- 某班级有8名男生和6名女生,现要选出3人组成学习小组,要求小组中至少有1名男生和1名女生,则不同的选法共有( )。
{{ select(1) }}
- 112
- 168
- 224
- 288
- 在杨辉三角中,从第行开始计数,第行的所有数之和为( )。
{{ select(2) }}
- 512
- 1024
- 2048
- 4096
- 下列代码实现了快速幂算法,其时间复杂度为( )。
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;
}
{{ select(3) }}
- 从本不同的数学书和本不同的物理书中选取本书,要求至少包含本数学书,则不同的选法有( )。
{{ select(4) }}
- 60
- 74
- 80
- 84
- 在二叉搜索树(BST)中,若中序遍历的序列为{},且先序遍历的第一个元素为,则下列说法正确的是( )。
{{ select(5) }}
- 该树一定是一棵完全二叉树
- 元素4和5不可能是兄弟节点
- 元素1所在节点的深度可能大于3(根节点深度为1)
- 元素2一定是元素1的父节点
- 在一个有向带权图中,使用Dijkstra算法求单源最短路时,若使用优先队列(小根堆)优化,其时间复杂度为( )。
{{ select(6) }}
- 对于含个顶点()的连通加权有向图,若图中不存在负权环,则任意两点之间的最短路径(简单路径)最多包含( )条边。
{{ select(7) }}
- n
- n-1
- n+1
- 无法确定,取决于图的具体边数
- 在使用Floyd算法求任意两点间最短路径时,时间复杂度为。若在某次算法执行前,已经用 Dijkstra 算
法正确求出了所有点对的最短路并存入了
dist数组。如果此时继续对该dist数组执行一次完整的 Floyd 算法过程(无任何提前终止),执行完毕后dist数组内的值( )。
{{ select(8) }}
- 会发生改变,因为 Floyd 又做了一次松弛
- 不会发生改变
- 可能变大,因为未针对已有最短路优化
- 可能在某些负权图中陷入死循环
- 关于图论中的最短路径算法,下列说法中严格正确的是( )。
{{ select(9) }}
- Dijkstra 算法能够高效处理包含负权边的有向图。
- Floyd 算法可以求出任意两点间的最短路径,且允许图中存在负权边(但不能有负权环)。
- 单源最短路径算法无法用于无向图,无向图只能通过 BFS 求解。
- Dijkstra 算法的每一步必定从当前未访问的节点中,选取距离起始点最远的节点进行松弛操作。
- 有6个人排成一排照相,其中甲、乙必须相邻,且丙不能站在排头,不同排法有( )种。
{{ select(10) }}
- 120
- 144
- 192
- 240
- 下列代码试图实现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];
}
{{ select(11) }}
- dist[i][k] + dist[k][j] < dist[i][j]
- dist[i][k] != INF && dist[k][j] != INF
- dist[i][k] != INF && dist[k][j] != INF && dist[i][k] + dist[k][j] < dist[i][j]
- dist[i][j] == INF
- 用数字0、1、2、3、4组成无重复数字的五位偶数,共有( )个。
{{ select(12) }}
- 48
- 60
- 72
- 96
- 在一个无向带权图中,若使用 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;
}
{{ select(13) }}
-
graph[u][v] && !inMST[v] && graph[u][v] < minEdge[v]
-
!inMST[v] && graph[u][v] < minEdge[v]
-
graph[u][v] > 0 && !inMST[v]
-
!inMST[v] && minEdge[v] > 0
- 已知三个点 在平面直角坐标系中的坐标。下列 C++ 表达式中,在精度误差范围
1e-8内能正确计算判断这三个点是三点共线的表达式是( )
{{ select(14) }}
-
(x2-x1)/(y2-y1) == (x3-x1)/(y3-y1)
-
(x2-x1)(y3-y1)-(x3-x1)(y2-y1) == 0
-
fabs((x2-x1)(y3-y1)-(x3-x1)(y2-y1)) < 1e-8
-
fabs((x2-x1)/(y2-y1)-(x3-x1)/(y3-y1)) < 1e-8
- 在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;
}
{{ select(15) }}
- 16 8 8 8 1 1
- 16 8 16 8 1 1
- 16 8 8 4 4 1
- 16 8 8 8 4 1
二、判断题(每题 2 分,共 20 分)
- 在C++中,若结构体中包含一个
static成员变量,则该变量的存储空间属于结构体对象的一部分。( )
{{ select(16) }}
- 正确
- 错误
- 对于任意正整数 ,二项式 展开式中各项的二项式系数之和等于 。(
{{ select(17) }}
- 正确
- 错误
- 在C++中,若函数参数类型为
const int &,则该参数既可以绑定左值,也可以绑定右值。( )
{{ select(18) }}
- 正确
- 错误
- 若一个无向图的最小生成树唯一,则图中所有边权必定各不相同。( )
{{ select(19) }}
- 正确
- 错误
- 使用快速排序对个元素进行排序时,无论最好、最坏还是平均情况,时间复杂度均为。( )
{{ select(20) }}
- 正确
- 错误
- 若一个图中所有顶点的度数为偶数,则一定存在欧拉回路。( )
{{ select(21) }}
- 正确
- 错误
- 使用倍增法预处理区间最值问题时,预处理的时间复杂度为 ,查询的时间复杂度为 。( )
{{ select(22) }}
- 正确
- 错误
- 如果将一个连通无向图 中所有边的权值都统一增加同一个正整数常数 ,形成图 。则 的最小生成树中每条边在 中对应的边组成的树,一定是 的最小生成树。( )
{{ select(23) }}
- 正确
- 错误
- 在图论算法中,Kruskal算法和Prim算法都可以用来求解最小生成树,且这两者的贪心策略无论在任何连通无向图上求得的最小生成树总边权和必定相同。( )
{{ select(24) }}
- 正确
- 错误
- 在动态规划问题中,“状态转移方程+递推”和“递归+记忆化搜索”通常是解决同一问题的两种不同实现方式,它们的时间复杂度总是相同的。( )
{{ select(25) }}
- 正确
- 错误