#GESP1357. [GESP202603八级] 客观题

[GESP202603八级] 客观题

一、单选题(每题 2 分,共 30 分)

第 1 题 某班级有 88 名男生和 66 名女生,现要选出 33 人组成学习小组,要求小组中至少有 11 名男生和11 名女生,则不同的选法共有 ( ) 种。

{{ select(1) }}

  • 112112
  • 168168
  • 224224
  • 288288

第 2 题 在杨辉三角中,从第 00 行开始计数,第 1010 行的所有数之和为 ( )。

{{ select(2) }}

  • 512512
  • 10241024
  • 20482048
  • 40964096

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

01 long long fastPow(long long b, long long e, long long mod) {
02     long long result = 1;
03     while (e > 0) {
04         if (e & 1)
05             result = result * b % mod;
06             b = b * b % mod;
07             e >>= 1;
08     }
09     return result;
10 }

{{ select(3) }}

  • O(logb)O(logb)
  • O(loge)O(loge)
  • O(logmod)O(logmod)
  • O(e)O(e)

第 4 题55 本不同的数学书和44 本不同的物理书中选取 33 本书,要求至少包含 11 本数学书,则不同的选法有 ( ) 种。

{{ select(4) }}

  • 6060
  • 7474
  • 8080
  • 8484

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

{{ select(5) }}

  • 该树一定是一棵完全二叉树
  • 元素 4455 不可能是兄弟节点
  • 元素 11 所在节点的深度可能大于33(根节点深度为 11)
  • 元素 22 一定是元素 11 的父节点

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

{{ select(6) }}

  • O(V2)O(V^2)
  • O(VE)O(V \cdot E)
  • O((V+E)logV)O((V+E)logV)
  • O(V2logV)O(V^2logV)

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

{{ select(7) }}

  • nn
  • n1n-1
  • n+1n+1
  • 无法确定,取决于图的具体边数

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

{{ select(8) }}

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

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

{{ select(9) }}

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

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

{{ select(10) }}

  • 120120
  • 144144
  • 192192
  • 240240

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

01 void floyd(int n, int dist[][MAXN]) {
02     for (int k = 0; k < n; k++)
03         for (int i = 0; i < n; i++)
04             for (int j = 0; j < n; j++)
05                 if (__________) // 在此处填入选项
06                     dist[i][j] = dist[i][k] + dist[k][j];
07 }

{{ 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

第 12 题 用数字 0011223344 组成无重复数字的五位偶数,共有( )个。

{{ select(12) }}

  • 4848
  • 6060
  • 7272
  • 9696

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

01 int prim(vector<vector<int>>& graph, int n) {
02     vector<bool> inMST(n, false);
03     vector<int> minEdge(n, INT_MAX);
04     minEdge[0] = 0;
05     int result = 0;
06     for (int i = 0; i < n; i++) {
07         int u = -1;
08         for (int j = 0; j < n; j++)
09             if (!inMST[j] && (u == -1 || minEdge[j] < minEdge[u]))
10                 u = j;
11         inMST[u] = true;
12         result += minEdge[u];
13         for (int v = 0; v < n; v++)
14             if (__________) // 在此处填入选项
15                 minEdge[v] = graph[u][v];
16     }
17     return result;
18 }

{{ 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

第 14 题 已知三个点A(x1,y1),B(x2,y2),C(x3,y3)A(x_1,y_1),B(x_2,y_2),C(x_3,y_3) 在平面直角坐标系中的坐标。下列 C++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

第 15 题6464 位操作系统下(LP64/LLP64LP64/LLP64 模型),下面代码的输出结果是 ( )

01 #include <iostream>
02 using namespace std;
03 
04 int main() {
05     int a[4] = {1, 2, 3, 4};
06     int (*p)[4] = &a;
07     int *q = a;
08
09     cout << sizeof(a) << " ";
10     cout << sizeof(p) << " ";
11     cout << sizeof(p + 1) << " ";
12     cout << sizeof(q + 1) << " ";
13     cout << (p + 1) - p << " ";
14     cout << (q + 1) - q << endl;
15 }

{{ 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 分)

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

{{ select(16) }}

  • 正确
  • 错误

第 2 题 对于任意正整数 nn,二项式 (a+6)n(a+6)^n 展开式中各项的二项式系数之和等于 2n2^n

{{ select(17) }}

  • 正确
  • 错误

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

{{ select(18) }}

  • 正确
  • 错误

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

{{ select(19) }}

  • 正确
  • 错误

第 5 题 使用快速排序对nn 个元素进行排序时,无论最好、最坏还是平均情况,时间复杂度均为O(nlogn)O(nlogn)

{{ select(20) }}

  • 正确
  • 错误

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

{{ select(21) }}

  • 正确
  • 错误

第 7 题 使用倍增法预处理区间最值问题时,预处理的时间复杂度为O(nlogn),查询的时间复杂度为 O(1)O(1)

{{ select(22) }}

  • 正确
  • 错误

第 8 题 如果将一个连通无向图 G1G_1 中所有边的权值都统一增加同一个正整数常数 CC,形成图 G2G_2。则G1G_1 的最小生成树中每条边在 G2G_2 中对应的边组成的树,一定是 G2G_2 的最小生成树。

{{ select(23) }}

  • 正确
  • 错误

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

{{ select(24) }}

  • 正确
  • 错误

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

{{ select(25) }}

  • 正确
  • 错误