某班级有 名男生和 名女生,现要选出 人组成学习小组,要求小组中至少有 名男生和 名女生,则不同的选法共有( )种。
D:288。分类:2 男 1 女 C(8,2)×C(6,1)=28×6=168,1 男 2 女 C(8,1)×C(6,2)=8×15=120,两类互斥相加得 288。
在杨辉三角中,从第 行开始计数,第 行的所有数之和为( )。
B:1024。杨辉三角第 n 行(从 0 起)各数之和为 2ⁿ,第 10 行的和为 2¹⁰=1024,对应 (a+b)¹⁰ 的系数和。
下列代码实现了快速幂算法,其时间复杂度为( )。
01long 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}
B:O(log e)。循环中指数 e 每次右移一位(e>>=1),迭代约 log₂e 次,每轮常数次乘法取模,与底数 b 无关。
从 本不同的数学书和 本不同的物理书中选取 本书,要求至少包含 本数学书,则不同的选法有( )种。
C:80。总数 C(9,3)=84 减去不含数学书的选法(全物理)C(4,3)=4,得 84−4=80;补集法比逐类枚举更直接。
在二叉搜索树(BST)中,若中序遍历的序列为 ,且先序遍历的第一个序列元素为 ,则下列说法正确的是( )。
B:先序首元素 3 说明根为 3,中序分左右子树 {1,2}、{4,5}。右子树仅两节点,4、5 必为父子(4 右子 5 或 5 左子 4),不可能是兄弟;1 最深到 3 不会更深,2 也未必是 1 的父。
在一个有向带权图中,使用 Dijkstra 算法求单源最短路时,若使用优先队列(小根堆)优化,其时间复杂度为( )。
C:O((V+E)log V)。小根堆插入、取出各 O(log V),V 个顶点各出队一次、E 条边各松弛一次,总 O((V+E)log V)。
对于含 个顶点 的连通加权有向图,若图中不存在负权环,则任意两点之间的最短路径(简单路径)最多包含( )条边。
B:n−1。无负权环时最短路径中的环可删去而不变长,故可取简单路径,最多含 n 个顶点、n−1 条边,这是最短路的基本性质。
在使用 Floyd 算法求任意两点间最短路径时,时间复杂度为 。若在某次算法执行前,已经用 Dijkstra 算法正确求出了所有点对的最短路并存入了 dist 数组。如果此时继续对该 dist 数组执行一次完整的 Floyd 算法过程(无任何提前终止),执行完毕后 dist 数组内的值( )。
B:不会改变。Floyd 只在 dist[i][k]+dist[k][j]<dist[i][j] 时更新;dist 已是最短路时该条件永假,再跑一轮完整 Floyd 数组保持原值。
关于图论中的最短路径算法,下列说法中严格正确的是( )。
B:Floyd 允许负权边、只要无负权环即可求出任意两点最短路;A 中 Dijkstra 遇负权边失效,C 中 Dijkstra 可用于无向图(拆成两条有向边),D 中 Dijkstra 每步选最近节点而非最远。
有个人排成一排照相,其中甲、乙两人必须相邻,且丙不能站在排头的不同排法有( )种。
C:192。甲乙捆绑(内部 2 种)与其余 4 人共 5 个元素排列 5!=120,共 240;减去丙站排头:捆绑体与丁、戊、己排后四位 4!×2=48,240−48=192。
下列代码试图实现 Floyd 算法求所有点对之间的最短路径,横线处应填入( )。
01void 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}
C:三个条件缺一不可:两段都可达(非 INF)且经 k 中转更短才更新;A 漏判不可达会做无效加法,B 缺少大小比较,D 只处理 INF 项。
用数字 组成无重复数字的五位偶数,共有( )个。
B:60。按末位分类:末位 0 时前四位 4!=24;末位 2 或 4 时首位不能为 0(各 3 种),中间三位 3!=6,各 18;共 24+18+18=60。
在一个无向带权图中,若使用 Prim 算法从顶点 开始构造最小生成树(边权均为正整数,且 graph[u][v] == 0 表示无边),下列代码中横线处应填入( )。
01int 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} 19
A:graph[u][v] && !inMST[v] && graph[u][v]<minEdge[v]。graph[u][v] 非 0 才表示有边,排除已入树顶点,且仅当新边更短才更新;B 会把无边当边,C 缺比较,D 语义不符。
已知三个点 在平面直角坐标系中的坐标。下列 C++ 表达式中,在精度误差范围 1e-8 内能正确计算判断这三个点是三点共线的表达式是( )。
C:用叉积 (x2-x1)(y3-y1)-(x3-x1)(y2-y1) 判断共线,浮点结果与 0 比较须用 fabs<1e-8;A、D 用除法会遇零分母且放大误差,B 的 ==0 对浮点几乎恒不成立。
在 64 位操作系统下(LP64 / LLP64 模型),下面代码的输出结果是()。
01#include <iostream> 02using namespace std; 03 04int 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}
A:16 8 8 8 1 1。a 为 4 个 int 共 16 字节;p、p+1、q+1 都是指针,64 位下 sizeof 均 8;(p+1)-p 按 int[4] 步进差 1,(q+1)-q 按 int 步进差 1;B 错把 sizeof(p+1) 当数组大小。
在 C++ 中,若结构体中包含一个 static 成员变量,则该变量的存储空间属于结构体对象的一部分。( )
B:错误。static 成员变量属于类本身、所有对象共享,存放在静态存储区,不占单个对象的内存,sizeof(结构体) 也不包含它。
对于任意正整数 ,二项式 展开式中各项的二项式系数之和等于 。( )
A:正确。令 a=b=1,展开式左边为 2ⁿ,右边恰为各项二项式系数之和,故任意 n 的系数和等于 2ⁿ,对一切正整数 n 成立。
在 C++ 中,若函数参数类型为 const int &,则该参数既可以绑定左值,也可以绑定右值。( )
A:正确。const 左值引用既能绑定左值也能绑定临时右值(右值被延长生命周期);只有非常量左值引用才不能绑定右值,这是 C++ 引用规则。
若一个无向图的最小生成树唯一,则图中所有边权必定各不相同。( )
B:错误。边权全不同是 MST 唯一的充分条件而非必要条件;存在相等边权时(如相等边不构成环竞争)最小生成树仍可唯一,故推不出权值必定全异。
使用快速排序对 个元素进行排序时,无论最好、最坏还是平均情况,时间复杂度均为 。( )
B:错误。快排平均与最好为 O(n log n),但最坏情况(如每次划分严重失衡)退化为 O(n²),并非恒为 O(n log n)。
若一个图中所有顶点的度数为偶数,则一定存在欧拉回路。( )
B:错误。存在欧拉回路还要求图连通(所有非零度顶点在同一连通分量);度全为偶但不连通的图只有欧拉路径片段,不存在遍历全图的欧拉回路。
使用倍增法预处理区间最值问题时,预处理的时间复杂度为 ,查询的时间复杂度为 。( )
A:正确。ST 表对每个起点预处理 2^k 长度区间最值共 O(n log n) 个值;查询时用两个覆盖区间的重叠最值 O(1) 得到答案。
如果将一个连通无向图 中所有边的权值都统一增加同一个正整数常数 C,形成图 。则 的最小生成树中每条边在 中对应的边组成的树,一定是 的最小生成树。( )
A:正确。所有边权同时加同一常数 C 不改变边权相对大小,Kruskal 排序与选边过程完全一致,原 MST 仍是新图的最小生成树。
在图论算法中,Kruskal 算法和 Prim 算法都可以用来求解最小生成树,且这两者的贪心策略无论在任何连通无向图上求得的最小生成树总边权和必定相同。( )
A:正确。同一连通无向图的所有最小生成树总边权和唯一相等,Kruskal 与 Prim 都是正确 MST 算法,求出的权值和必然相同(边集可能不同)。
在动态规划问题中,“状态转移方程+递推”和“递归+记忆化搜索”通常是解决同一问题的两种不同实现方式,它们的时间复杂度总是相同的。( )
B:错误。记忆化递归只计算被访问的状态,只需部分状态时比自底向上递推更省;无记忆化的朴素递归又因重复计算更慢,『总是相同』不成立。