试卷解析 · 理解每一步
2024-06-Level-8
2024-06-Level-8
试卷解析总览,可直接查看每题答案与解析。
第 1 题(单选题,2 分)
GESP活动期间,举办方从获胜者ABCDE五个人中选出三个人排成一队升国旗,其中A不能排在队首,请问有多少种排法?
正确答案B
解析详情
先安排队首,A 不能在此位置,故有 4 种选择。
队伍只有 3 人;确定队首后,第二位从剩余 4 人中选,第三位从剩余 3 人中选,共 种,选 B。
第 2 题(单选题,2 分)
7进制数235转换成3进制数是()。
正确答案A
解析详情
先按位权展开七进制数:。
再拆成三进制位权:,依次得到数字 1、1、1、2、1,即 ,选 A。
第 3 题(单选题,2 分)
0,1,2,3,4,5 这些数字组成一个三位数,请问没有重复数字的情况下,有多少种组法()。
正确答案D
解析详情
百位不能为 0,所以有 1 到 5 共 5 种选择。确定百位后,十位可以用剩下的任意数字,包括 0,共 5 种。
个位再从剩下的 4 个数字中选择,因此总数为 ,选 D。
第 4 题(单选题,2 分)
有 V 个顶点、E 条边的图的深度优先搜索遍历时间复杂度为()。
正确答案C
解析详情
以邻接表存储时,DFS 给每个顶点做一次访问标记,并扫描每条边对应的邻接项。
顶点部分为 ,边部分为 ,相加得到 ,选 C。无向边虽扫描两次,也只是常数倍。
第 5 题(单选题,2 分)
一对夫妻生男生女的概率相同。已知这对夫妻有两个孩子,其中一个是女孩,另一个是男孩的概率是多少?
正确答案C
解析详情
两个孩子的等可能情况可写成 BB、BG、GB、GG。已知“至少有一个是女孩”后,排除 BB,只剩 BG、GB、GG 三种,其中另一个是男孩的有 2 种,所以概率是 2/3;但当前答案给的是 C,对应 1/2。此处解析按当前标准答案写,答案依据需结合原卷确认。
第 6 题(单选题,2 分)
从1到2024这2024个数中,共有()个包含数字6的数。
正确答案A
解析详情
先统计 000 到 999:三个位置不出现 6 时各有 9 种选择,共 个;因此含 6 的有 个。
1000 到 1999 的千位为 1,后三位同理有 271 个。2000 到 2024 中只有 2006、2016 含 6,共 2 个。
合计 ,选 A;000 不含 6,不影响所求范围。
第 7 题(单选题,2 分)
二进制数 100.001 转换成十进制数是()。
正确答案B
解析详情
二进制小数点左边的位权是 1、2、4,右边依次是 1/2、1/4、1/8。
,选 B。
第 8 题(单选题,2 分)
以下函数声明,哪个是符合C++语法的?()。
正确答案B
解析详情
二维数组访问一行后要能计算下一行的起始地址,因此形参中必须指定第二维长度。
char a[][20] 保留每行 20 个 char 的信息,第一维可省略,故 B 正确。a[][] 和 a[10][] 均缺少必要的列数;char[,] 也不是 C++ 数组声明语法。
第 9 题(单选题,2 分)
下面有关C++重载的说法,错误的是()。
正确答案D
解析详情
函数可以通过参数个数或参数类型区分重载,不同类中也可定义同名成员函数。
但 C++ 并非所有运算符都能重载,例如 .、::、?: 和 sizeof 不能重载,所以 D 错误。
第 10 题(单选题,2 分)
小于或等于给定正整数 n 的数中,与 n 互质的数的个数,我们称为欧拉函数,记作。下面说法错误的是()。
正确答案D
解析详情
两个不同质数的正因数各只有 1 和自身,所以最大公约数必为 1。相邻的两个质数一定不同,因此一定互质,D 错误。
对于质数 n,1 到 n−1 都与它互质,故 。相邻整数的公因数必须整除它们的差 1,也必互质。
B 按通常题意指两个不同的质数;若允许两数相同,则需额外说明。
第 11 题(单选题,2 分)
已知一棵二叉树有10个节点,则其中至多有()个节点有2个子节点。
正确答案A
解析详情
设有两个孩子的结点数为 k,每个这样的结点贡献两条向下的边。10 个结点的树一共只有 9 条边,所以 ,得到 k≤4。
该上界可以实现:4 个双孩子结点、1 个单孩子结点、5 个叶结点共有 10 个结点,因此最多为 4,选 A。
第 12 题(单选题,2 分)
二项展开式的系数,正好满足杨辉三角的规律。当时,二项式展开式中项的系数是( )。
正确答案C
解析详情
可看作 10 个 (x+y) 相乘。要得到 ,必须恰好从一个因子取 x,其余九个都取 y。
选择这个因子有 种,因此系数为 10,选 C。
第 13 题(单选题,2 分)
下面程序的时间复杂度为()。
bool notPrime[N] = {false};
void sieve() {
for (int n = 2; n * n < N; n++)
if (!notPrime[n])
for (int i = n * n; i < N; i += n)
notPrime[i] = true;
}正确答案C
解析详情
只有 n 为质数时,才从 n² 开始按 n 的步长标记合数。质数 p 产生的标记次数至多为 N/p。
对各质数求和,工作量为 ,选 C。从 p² 开始是因为更小倍数已有较小质因子标记。
第 14 题(单选题,2 分)
下面程序的最差时间复杂度为()。
int gcd(int m, int n) {
if (m == 0)
return n;
return gcd(n % m, m);
}正确答案B
解析详情
每次把 (m,n) 变为 (n%m,m),利用 ,直到第一个参数为 0。
余数不断减小,至多每两轮至少缩小一半,递归深度为对数级。按正整数输入和常数时间取模的惯例,选择 ,即 B。
第 15 题(单选题,2 分)
下面程序的输出为()。
#include <iostream>
using namespace std;
int main() {
int cnt = 0;
for (int x = 0; x <= 10; x++)
for (int y = 0; y <= 10; y++)
for (int z = 0; z <= 10; z++)
if (x + y + z <= 15)
cnt++;
cout << cnt << endl;
return 0;
}正确答案D
解析详情
所有三元组共有 个。将 (x,y,z) 映射为 (10−x,10−y,10−z),总和 s 对应 30−s,所以总和小于 15 与大于 15 的数量相同。
总和恰为 15 的方案数为 。
因此总和不超过 15 的方案数为 ,选 D。
判断题
第 1 题(判断题,2 分)
ABCDE 五个小朋友,排成一队跑步,其中 AB 两人必须排在一起,一共有 48 种排法。
正确答案正确
解析详情
先把 A、B 看成一个整体,与 C、D、E 共四个单位,排列有 种。
整体内部可排 AB 或 BA,另有 2 种选择,总数为 ,所以正确。
第 2 题(判断题,2 分)
已知 double 类型的变量 a 和 b,则执行语句 a = a + b; b = a - b; a = a - b; 后,变量 a 和 b 的值会互换。
正确答案错误
解析详情
在精确实数运算中,三次加减可实现交换,但 double 的有效精度有限,a+b 可能发生舍入。
例如 a=1e20、b=1 时,a+b 可能仍被存为 1e20;后续计算会使 a 变为 0,无法恢复原来 b 的值 1。
因此不能保证交换成功,应使用临时变量或 swap。
第 3 题(判断题,2 分)
一个袋子中有3个完全相同的红色小球、2个完全相同的蓝色小球。每次从中取出1个,再放回袋子,这样进行3次后,可能的颜色顺序有8种。
正确答案正确
解析详情
取后放回意味着每一步红、蓝都仍可能出现,不存在球数耗尽。
三次分别有 2 种颜色选择,共 种,判断正确。各种序列出现的概率未必相同,但都可能出现。
第 4 题(判断题,2 分)
已知 int 类型的变量 a 和 b 中分别存储着一个直角三角形的两条直角边的长度,则斜边的长度可以通过表达式sqrt(a * a + b * b)求得。
正确答案正确
解析详情
两条直角边为 a、b 时,斜边 c 满足 。长度取非负值,所以 ,对应题中表达式。
例如 a=3、b=4,结果为 5。实际编码还需防止 int 乘法溢出,可先转换为 double 或更宽整数。
第 5 题(判断题,2 分)
在一个包含 v 个顶点、 e 条边的带权连通简单有向图上使用Dijkstra算法求最短路径,时间复杂度为O(v²),可进一步优化至O(e + v log(v))。
正确答案正确
解析详情
在边权非负的适用前提下,朴素 Dijkstra 每轮扫描 v 个顶点选最小距离,共 v 轮,耗时 。
利用支持高效 decrease-key 的 Fibonacci 堆,可将摊还复杂度改进为 ,因此题目所述优化可以实现。普通二叉堆通常是 。
第 6 题(判断题,2 分)
在N个元素的二叉排序树中查找一个元素,最差情况的时间复杂度是。
正确答案错误
解析详情
若依次插入 1、2、3、…、N,普通二叉排序树会形成只有右孩子的一条链。
查找最大值 N 需沿链比较 N 次,因此最坏为 ,题目所说 错误。
第 7 题(判断题,2 分)
C++语言中,可以为同一个类定义多个析构函数。
正确答案错误
解析详情
在本题采用的常规 C++ 类模型中,析构函数名为
类名,不接收参数,也不能通过不同参数列表重载。
例如同一类同时定义两个
A() 会重复定义,所以题目说可以定义多个析构函数错误。
第 8 题(判断题,2 分)
使用单链表和使用双向链表,查找元素的时间复杂度相同。
正确答案正确
解析详情
单链表和双向链表都不能按下标常数时间随机访问。查找指定值时,都可能逐个比较到链尾。
因此两者通常的最坏查找复杂度均为 。双向链表便于反向移动或删除已知结点,但不改变普通查找的数量级。
第 9 题(判断题,2 分)
为解决哈希函数冲突,可以使用不同的哈希函数为每个表项各建立一个子哈希表,用来管理该表项的所有冲突元素。这些子哈希表一定不会发生冲突。
正确答案错误
解析详情
把发生冲突的元素再分配到子哈希表,只是又进行了一次哈希,不自动保证新映射互不冲突。
例如两个不同关键字在第二层仍可能得到同一余数。只有进一步选择、验证合适的函数及容量,才能构造无冲突子表,所以“一定不会”错误。
第 10 题(判断题,2 分)
要判断无向图的连通性,在深度优先搜索和广度优先搜索中选择,深度优先的平均时间复杂度更低。
正确答案错误
解析详情
在相同邻接表存储下,DFS 和 BFS 都要访问顶点并扫描相邻边,完整遍历的复杂度均为 。
二者访问顺序和辅助空间组织不同:DFS 使用栈,BFS 使用队列,但不能据此断言 DFS 的平均时间复杂度更低。