GESP活动期间,举办⽅从获胜者ABCDE五个⼈中选出三个⼈排成⼀队升国旗,其中A不能排在队⾸,请问有多少种排法?
B:48。从 5 人中选 3 人排列共 P(5,3)=60 种,减去 A 居队首的 P(4,2)=12 种得 48;或队首从 BCDE 中选(4 种),另两位在剩余 4 人中排列 P(4,2)=12,4×12=48。
进制数 转换成 进制数是( )。
A:11121。先化十进制:235₇=2×49+3×7+5=124;再按 3 的幂拆 124=1×81+1×27+1×9+2×3+1,即 11121₃;其余选项是进位误算。
这些数字组成⼀个三位数,请问没有重复数字的情况下,有多少种组法( )。
D:100。百位不能取 0,从 1~5 中选有 5 种;十位在剩余 5 个数字中选 5 种;个位剩 4 种;分步相乘 5×5×4=100。
有 个顶点、 条边的图的深度优先搜索遍历时间复杂度为( )。
C:O(V+E)。DFS 每个顶点入栈访问一次,邻接表每条出边被扫描一次,总耗时与 V+E 成正比;单独 O(V) 或 O(E) 都漏算另一半。
⼀对夫妻⽣男⽣⼥的概率相同。已知这对夫妻有两个孩⼦,其中⼀个是⼥孩,另⼀个是男孩的概率是多少?
C:1/2。两个孩子性别独立,已知其中一个孩子的性别只确定了该孩子,不改变另一个孩子的性别分布,故另一个为男孩的概率仍为 1/2;2/3 是『至少一个女孩』条件下的另一种解读。
从1到2024这个数中,共有( )个包含数字6的数。
A:544。用补集数不含 6 的数:1~999 为 9³−1=728,1000~1999 为 9³=729,2000~2024 中仅 2006、2016 含 6 故有 23 个;2024−(728+729+23)=544。
⼆进制数 转换成⼗进制数是( )。
B:4.125。整数部分 100₂=4;小数部分 0.001₂=2⁻³=0.125,相加得 4.125;其余选项把小数位权 0.125 误算成 0.25 或 0.75。
以下函数声明,哪个是符合C++语法的?( )。
B:二维数组作形参必须写明列数以便寻址,char a[][20] 合法;A 两个维度都省略、C 缺列数无法定位元素,D 的 char[,] 是 C# 写法,C++ 无此语法。
下⾯有关C++重载的说法,错误的是( )。
D:并非所有运算符都可重载,成员访问符 .、作用域符 ::、三目 ?:、sizeof 等被禁止;A、B 靠参数个数/类型区分,C 靠类作用域区分,均正确。
⼩于或等于给定正整数 的数中,与 互质的数的个数,我们称为欧拉函数,记作 。下⾯说法错误的是( )。
D:相邻的两个质数(如 3 与 5、7 与 11)必然互质,『不一定』错误;A 是 φ 的定义性质,B 不同质数无公共因子,C 相邻整数最大公约数为 1。
已知⼀棵⼆叉树有 个节点,则其中⾄多有( )个节点有 个⼦节点。
A:4。由叶子数 n0=n2+1 和 n=n0+n1+n2 得 10=2n2+n1+1,即 2n2+n1=9;让单分支结点 n1 尽量小(可为 0),n2 最大取 4。
⼆项展开式 的系数,正好满足杨辉三角的规律。当 时,二项式展开式中 项的系数是()。
C:10。xy⁹ 项系数即二项式系数 C(10,9)=10,对应杨辉三角第 10 行第 10 个数;从 10 个 (x+y) 因子中选 9 个贡献 y、1 个贡献 x。
下⾯程序的时间复杂度为( )。
01bool notPrime[N] = {false}; 02void sieve() { 03 for (int n = 2; n * n < N; n++) 04 if (!notPrime[n]) 05 for (int i = n * n; i < N; i += n) 06 notPrime[i] = true; 07}
C:O(N loglog N)。埃氏筛外层只到 √N,内层从 n² 起以步长 n 标记倍数;每个质数 p 标记约 N/p 个数,总量约为 N∑1/p≈N·loglog N。
下⾯程序的最差时间复杂度为( )。
01int gcd(int m, int n) { 02 if (m == 0) 03 return n; 04 return gcd(n % m, m); 05}
B:O(log n)。这是辗转相除法递归版,每层把 (m,n) 换成 (n%m,m),余数约减半,规模指数下降;相邻斐波那契数构成最坏情形,层数约 log n。
下⾯程序的输出为( )。
01#include <iostream> 02using namespace std; 03int main() { 04 int cnt = 0; 05 for (int x = 0; x <= 10; x++) 06 for (int y = 0; y <= 10; y++) 07 for (int z = 0; z <= 10; z++) 08 if (x + y + z <= 15) 09 cnt++; 10 cout << cnt << endl; 11 return 0; 12}
D:711。先忽略上限:x+y+z≤15 的非负整数解为 C(18,3)=816;再扣某变量≥11 的越界解,如 x≥11 时令 x′=x-11 得 C(7,3)=35,三个变量共 105,816−105=711。
ABCDE五个⼩朋友,排成⼀队跑步,其中AB两⼈必须排在⼀起,⼀共有种排法。
A:正确。捆绑法:把 AB 视为一个整体,与 C、D、E 共 4 个元素排列,4!=24 种;AB 两人内部再互换 2!=2 种,共 24×2=48 种。
已知 double 类型的变量 和 ,则执⾏语句a = a + b; b = a - b; a = a - b;后,变量 和 的值会互换。
B:错误。加减法交换技巧对 int 是精确的,但 a、b 为 double 时 a+b、a-b 含浮点舍入误差,还原 a 与 b 的值可能不精确,不能保证严格互换。
⼀个袋⼦中有 个完全相同的红⾊⼩球、 个完全相同的蓝⾊⼩球。每次从中取出 个,再放回袋⼦,这样进⾏ 次后,可能的颜⾊顺序有 种。
A:正确。有放回抽取时每次独立,红、蓝两种颜色都可能出现,3 次序列共 2³=8 种,与袋中红蓝数量无关;无放回时才受数量限制。
已知 int 类型的变量 和 中分别存储着⼀个直角三角形的两条直角边的长度,则斜边的长度可以通过表达式 sqrt(a * a + b * b) 求得。
A:正确。勾股定理:斜边 c=√(a²+b²),把两条直角边的平方和开方即可得到斜边长度,结果与直角边同量纲,对任意正的直角边都成立。
在⼀个包含 个顶点、 条边的带权连通简单有向图上使⽤Dijkstra算法求最短路径,时间复杂度为 ,可进⼀步优化⾄。
A:正确。朴素 Dijkstra 每轮在未定顶点中扫描最小距离,O(v²);用优先队列维护最短距离、松弛每条边一次,可优化到 O((e+v)log v),斐波那契堆则达 O(e+v·log v)。
在 个元素的⼆叉排序树中查找⼀个元素,最差情况的时间复杂度是 。
B:错误。BST 最差情形是树退化为单链(按有序序列插入时),查找每步只排除一个结点,须比较到叶子,复杂度为 O(N) 而非 O(log N)。
C++语⾔中,可以为同⼀个类定义多个析构函数。
B:错误。析构函数没有参数列表、不能重载,一个类只能定义一个析构函数;可以定义多个的是构造函数,靠参数表区分重载,如多个不同参数的构造。
使⽤单链表和使⽤双向链表,查找元素的时间复杂度相同。
A:正确。两者都只能顺序遍历查找,无随机访问能力,查找同为 O(n);双向链表多出的前驱指针只让反向遍历和删除已知结点变快。
为解决哈希函数冲突,可以使⽤不同的哈希函数为每个表项各建⽴⼀个⼦哈希表,⽤来管理该表项的所有冲突元素。这些⼦哈希表⼀定不会发⽣冲突。
B:错误。子哈希表只是把冲突再降一级,表内元素仍可能散列到同一位置,二次冲突照样发生,不存在『一定不会冲突』的保证;只有表容量远大于元素数才可近似避免。
要判断⽆向图的连通性,在深度优先搜索和⼴度优先搜索中选择,深度优先的平均时间复杂度更低。
B:错误。DFS 与 BFS 判断连通性都要遍历全部可达顶点,时间复杂度同为 O(V+E),没有谁平均更低;差别仅在访问顺序与辅助结构。