GESP 2025年9月_C++六级试卷

从PDF导入:GESP 2025年9月_C++六级试卷

C++ 180分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
下列关于类的说法,错误的是( )。
A. 构造函数不能声明为虚函数,但析构函数可以。
B. 函数参数如声明为类的引用类型,调用时不会调用该类的复制构造函数。
C. 静态方法属于类而不是某个具体对象,因此推荐用类名::方法(...)调用。
D. 不管基类的析构函数是否是虚函数,都可以通过基类指针/引用正确删除派生类对象。
第2题 中级 2.0分 单选
假设变量veh是类Car的一个实例,我们可以调用veh.move(),是因为面向对象编程有( )性质。

A. 继承(Inheritance)
B. 封装(Encapsulation)
C. 多态(Polymorphism)
D. 链接(Linking)
第3题 中级 2.0分 单选
下面代码中v1和v2调用了相同接口move(),但输出结果不同,这体现了面向对象编程的( )特性。

A. 继承(Inheritance)
B. 封装(Encapsulation)
C. 多态(Polymorphism)
D. 链接(Linking)
第4题 中级 2.0分 单选
栈的操作特点是( )。
A. 先进先出
B. 先进后出
C. 随机访问
D. 双端进出
第5题 中级 2.0分 单选
循环队列常用于实现数据缓冲。假设一个循环队列容量为5(即最多存放4个元素,留一个位置区分空与满),依次进行操作:入队数据1,2,3,出队1个数据,再入队数据4和
A. [2, 3, 4, 5]
B. [1, 2, 3, 4]
C. [3, 4, 5, 2]
D. [2, 3, 5, 4]
第6题 中级 2.0分 单选
以下函数createTree()构造的树是什么类型?

A. 满二叉树
B. 完全二叉树
C. 二叉排序树
D. 其他都不对
第7题 中级 2.0分 单选
已知二叉树的中序遍历是[D,B,E,A,F,C],先序遍历是[A,B,D,E,C,F]。请问该二叉树的后序遍历结果是( )。
A. [D,E,B,F,C,A]
B. [D,B,E,F,C,A]
C. [D,E,B,C,F,A]
D. [B,D,E,F,C,A]
第8题 中级 2.0分 单选
完全二叉树可以用数组连续高效存储,如果节点从1开始编号,则对有两个孩子节点的节点i,( )。
A. 左孩子位于2i,右孩子位于2i+1
B. 完全二叉树的叶子节点可以出现在最后一层的任意位置
C. 所有节点都有两个孩子
D. 左孩子位于2i+1,右孩子位于2i+2
第9题 中级 2.0分 单选
设有字符集{a,b,c,d,e,f},其出现频率分别为{5,9,12,13,16,45}。哈夫曼算法构造最优前缀编码,以下哪一组可能是对应的哈夫曼编码?(非叶子
A. a:00;b:01;c:10;d:110;e:111;f:0
B. a:1100;b:1101;c:100;d:101;e:111;f:0
C. a:000;b:001;c:01;d:10;e:110;f:111
D. a:10;b:01;c:100;d:101;e:111;f:0
第10题 中级 2.0分 单选
下面代码生成格雷编码,则横线上应填写( )。

A. int i = 0; i < prev.size(); i++
B. int i = prev.size()-1; i >= 0; i--
C. auto s : prev
D. int i = prev.size()/2; i < prev.size(); i++
第11题 中级 2.0分 单选
请将下列树的深度优先遍历代码补充完整,横线处应填入( )。

A. vector
B. list
C. queue
D. stack
第12题 中级 2.0分 单选
令n是树的节点数目,下列代码实现了树的广度优先遍历,其时间复杂度是( )。

A. O(1)
B. O(n)
C. O(n^2)
D. O(n log n)
第13题 中级 2.0分 单选
在二叉排序树(Binary Search Tree, BST)中查找元素50,从根节点开始:若根值为60,则下一步应去搜索:
A. 左子树
B. 右子树
C. 随机
D. 根节点
第14题 中级 2.0分 单选
删除二叉排序树中的节点时,如果节点有两个孩子,则横线处应填入( ),其中findMax和findMin分别为寻找树的最大值和最小值的函数。

A. root->left
B. root->right
C. findMin(root->right)
D. findMax(root->left)
第15题 中级 2.0分 单选
给定n个物品和一个最大承重为W的背包,每个物品有一个重量和价值,每个物品只能选择放或不放。目标是选择若干个物品放入背包,使得总价值最大,且总重量不超过W,则横线

A. dp[w] = max(dp[w], dp[w] + val[i]);
B. dp[w] = dp[w - wt[i]] + val[i];
C. dp[w] = max(dp[w - 1], dp[w - wt[i]] + val[i]);
D. dp[w] = max(dp[w], dp[w - wt[i]] + val[i]);
第16题 中级 2.0分 判断
当基类可能被多态使用,其析构函数应该声明为虚函数。
T. 正确
F. 错误
第17题 中级 2.0分 判断
哈夫曼编码是最优前缀码,且编码结果唯一。
T. 正确
F. 错误
第18题 中级 2.0分 判断
一个含有n个节点的完全二叉树,高度为log(n)。
T. 正确
F. 错误
第19题 中级 2.0分 判断
在C++ STL中,栈(std::stack)的pop操作返回栈顶元素并移除它。
T. 正确
F. 错误
第20题 中级 2.0分 判断
循环队列通过模运算循环使用空间。
T. 正确
F. 错误
第21题 中级 2.0分 判断
一棵有n个节点的二叉树一定有n-1条边。
T. 正确
F. 错误
第22题 中级 2.0分 判断
以下代码实现了二叉树的中序遍历。输入以下二叉树,中序遍历结果是4 2 5 1 3 6。(树结构:根1,左子树2(孩子4,5),右子树3(右孩子6))

T. 正确
F. 错误
第23题 中级 2.0分 判断
下面代码实现的二叉排序树的查找操作时间复杂度是O(h),其中h为树高。

T. 正确
F. 错误
第24题 中级 2.0分 判断
下面代码实现了动态规划版本的斐波那契数列计算,其时间复杂度是O(n)。

T. 正确
F. 错误
第25题 中级 2.0分 判断
有一排香蕉,每个香蕉有不同的甜度值。小猴子想吃香蕉,但不能吃相邻的香蕉。以下代码能找到小猴子吃到最甜的香蕉组合。

T. 正确
F. 错误
第26题 中级 25.0分 编程
划分字符串

小A有一个由n个小写字母组成的字符串s。他希望将s划分为若干个子串,使得子串中每个字母至多出现一次。例如,对于字符串street来说,str+e+e+t是满足条件的划分;而s+tree+t不是,因为子串tree中e出现了两次。额外地,小A还给出了价值a,表示划分后长度为k的子串价值为a_k。小A希望最大化划分后得到的子串价值之和。你能帮他求出划分后子串价值之和的最大值吗?

【输入格式】
第一行,一个正整数n,表示字符串的长度。
第二行,一个包含n个小写字母的字符串s。
第三行,n个正整数a_1~a_n,表示不同长度的子串价值。
【输出格式】
一行,一个整数,表示划分后子串价值之和的最大值。
【样例输入1】

6
street
2 1 7 4 3 3
【样例输出1】

13
【样例输入2】

8
blossoms
1 1 2 3 5 8 13 21
【样例输出2】

8
对于所有测试点,保证1≤n≤10^5,1≤a_i≤10^9。
第27题 中级 25.0分 编程
货物运输

A国有n座城市,依次以1~n编号,其中1号城市为首都。这n座城市由n-1条双向道路连接,第i条道路连接编号为u_i和v_i的两座城市,道路长度为w_i。任意两座城市间均可通过双向道路到达。现在A国需要从首都向各个城市运送货物。具体来说,满载货物的车队会从首都开出,经过一座城市时将对应的货物送出,因此车队需要经过所有城市。A国希望你设计一条路线,在从首都出发经过所有城市的前提下,最小化经过的道路长度总和。注意一座城市可以经过多次,车队最后可以不返回首都。

【输入格式】
第一行,一个正整数n,表示A国的城市数量。
接下来n-1行,每行三个整数u_i,v_i,w_i,表示一条双向道路连接编号为u_i和v_i的两座城市,道路长度为w_i。
【输出格式】
一行,一个整数,表示你设计的路线所经过的道路长度总和。
【样例输入1】

4
1 2 6
1 3 1
3 4 5
【样例输出1】

18
【样例输入2】

7
1 2 1
2 3 1
3 4 1
7 6 1
6 5 1
5 1 1
【样例输出2】

9
对于所有测试点,保证2≤n≤10^5,1≤w_i≤10^9。
💬