2023年12月 GESP C++ 6级认证考试真题(含编程操作题部分)
选 单选题(共 15 题,每题 2 分)
关于 C++ 类和对象的说法,错误的是( )。
有关下面 C++ 代码的说法,错误的是( )。
有关下面 C++ 代码的说法,正确的是( )。
有关下面 C++ 代码的说法,错误的是( )。
的定义,有关下面 C++ 代码的说法正确的是( )。
有关下面 C++ 代码的说法正确的是( )。
对 hello world 使用霍夫曼编码(Huffman Coding),最少 bit(比特)为( )。
下面的 fiboA() 和 fiboB() 两个函数分别实现斐波那契数列,该数列第 $1$ 、第 $2$ 项值为 $1$ ,其余各项分别为前两项之和。下面有关说法错误的是( )。
有关下面 C++ 代码不正确的说法是( )。
下面有关树的存储,错误的是( )。
构造二叉树 $[1,2,3,\text{null},4]$( )。
下面有关布尔类型的函数的说法,正确的是( )。
通讯卫星在通信网络系统中主要起到( )的作用。
小杨想编写一个判断任意输入的整数 $N$ 是否为素数的程序,下面哪个方法不合适?( )
内排序有不同的类别,下面哪种排序算法和冒泡排序是同一类?( )
判 判断题(共 10 题,每题 2 分)
在面向对象中,方法在 C++ 的 class 中表现为 class 内定义的函数。( )
C++ 类的定义中,可以没有构造函数,会给出默认的构造函数( )
如果某个 C++ 对象(object)支持下标运算符(方括号运算符),则该对象在所对应 class 中以成员函数的形式进行了重载。( )
深度优先搜索(DFS,Depth First Search 的简写)属于图算法,其过程是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。( )
哈夫曼编码(Huffman Coding)具有唯一性,因此有确定的压缩率。 ( )
在下面 C++ 代码中,由于删除了变量 ptr,因此 ptr 所对应的数据也随之删除,故第 8 行代码被执行时,将报错。( )
二叉搜索树查找的平均时间复杂度为 $O(\log n)$。( )
二叉搜索树可以是空树(没有任何节点)或者单节点树(只有一个节点),或者多节点。如果是多节点,则左节点的值小于父节点的值,右节点的值大于父节点的值,由此推理,右节点树的值都大于根节点的值,左节点树的值都小于根节点的值。( )
小杨想写一个程序来算出正整数 $N$ 有多少个因数,经过思考他写出了一个重复没有超过 $N/2$ 次的循环就能够算出来了。( )
同样的整数序列分别保存在单链表和双向链中,这两种链表上的简单冒泡排序的复杂度相同。( )
编 编程操作题(共 2 题,共 50 分)
试题名称:闯关游戏
时间限制:1.0 s | 内存限制:512.0 MB
题目描述
你来到了一个闯关游戏。
这个游戏总共有 $N$ 关,每关都有 $M$ 个通道,你需要选择一个通道并通往后续关卡。其中,第 $i$ 个通道可以让你前进 $a_i$ 关,也就是说,如果你现在在第 $x$ 关,那么选择第 $i$ 个通道后,你将直接来到第 $x+a_i$ 关(特别地,如果 $x + a_i \geq N$,那么你就通关了)。此外,当你顺利离开第 $s$ 关时,你还将获得 $b_s$ 分。
游戏开始时,你在第 $0$ 关。请问,你通关时最多能获得多少总分。
输入格式
第一行两个整数 $N$,$M$,分别表示关卡数量和每关的通道数量。
接下来一行 $M$ 个用单个空格隔开的整数 $a_0,a_1\cdots,a_{M-1}$。保证 $1\le a_i \le N$。
接下来一行 $N$ 个用单个空格隔开的整数 $b_0,b_1\cdots,b_{N-1}$。保证 $|b_i|\le 10^5$。
输出格式
一行一个整数,表示你通关时最多能够获得的分数。
样例输入 #1
6 2
2 3
1 0 30 100 30 30
样例输出 #1
131
样例输入 #2
6 2
2 3
1 0 30 100 30 -1
样例输出 #2
101
说明/提示
样例解释 1
你可以在第 $0$ 关选择第 $1$ 个通道,获得 $1$ 分并来到第 $3$ 关;随后再选择第 $0$ 个通道,获得 $100$ 分并来到第 $5$ 关;最后任选一个通道,都可以获得 $30$ 分并通关。如此,总得分为 $1+100+30=131$。
样例解释 2
请注意,一些关卡的得分可能是负数。
数据范围
对于 $20%$ 的测试点,保证 $M=1$。
对于 $40%$ 的测试点,保证 $N \le 20$;保证 $M\le 2$。
对于所有测试点,保证 $1 \le N \le 10^4$;保证 $1 \le M\le 100$。
试题名称:工作沟通
时间限制:1.0 s | 内存限制:512.0 MB
题目描述
某公司有 $N$ 名员工,编号从 $0$ 至 $N-1$。其中,除了 $0$ 号员工是老板,其余每名员工都有一个直接领导。我们假设编号为 $i$ 的员工的直接领导是 $f_i$。
该公司有严格的管理制度,每位员工只能受到本人或直接领导或间接领导的管理。具体来说,规定员工 $x$ 可以管理员工 $y$,当且仅当 $x=y$,或 $x=f_y$,或 $x$ 可以管理 $f_y$。特别地,$0$ 号员工老板只能自我管理,无法由其他任何员工管理。
现在,有一些同事要开展合作,他们希望找到一位同事来主持这场合作,这位同事必须能够管理参与合作的所有同事。如果有多名满足这一条件的员工,他们希望找到编号最大的员工。你能帮帮他们吗?
输入格式
第一行一个整数 $N$,表示员工的数量。
第二行 $N - 1$ 个用空格隔开的正整数,依次为 $f_1,f_2,\dots f_{N−1}$。
第三行一个整数 $Q$,表示共有 $Q$ 场合作需要安排。
接下来 $Q$ 行,每行描述一场合作:开头是一个整数 $m$($2 \le m \le N$),表示参与本次合作的员工数量;接着是 $m$ 个整数,依次表示参与本次合作的员工编号(保证编号合法且不重复)。
保证公司结构合法,即不存在任意一名员工,其本人是自己的直接或间接领导。
输出格式
输出 $Q$ 行,每行一个整数,依次为每场合作的主持人选。
样例输入 #1
5
0 0 2 2
3
2 3 4
3 2 3 4
2 1 4
样例输出 #1
2
2
0
样例输入 #2
7
0 1 0 2 1 2
5
2 4 6
2 4 5
3 4 5 6
4 2 4 5 6
2 3 4
样例输出 #2
2
1
1
1
0
说明/提示
样例解释 1
对于第一场合作,员工 $3,4$ 有共同领导 $2$ ,可以主持合作。
对于第二场合作,员工 $2$ 本人即可以管理所有参与者。
对于第三场合作,只有 $0$ 号老板才能管理所有员工。
数据范围
对于 $50%$ 的测试点,保证 $N \leq 50$。
对于所有测试点,保证 $3 \leq N \leq 300$,$Q \leq 100$。
2024/1/28 添加一组 hack 数据。