GESP 2024年9月_C++六级试卷
从PDF导入:GESP 2024年9月_C++六级试卷
试卷题目预览
以下( )没有涉及C++语言的面向对象特性支持。
关于以下C++代码,( )行代码会引起编译错误。

有6个元素,按照6,5,4,3,2,1的顺序进入栈S,下列( )的出栈序列是不能出现的。
采用如下代码实现检查输入的字符串括号是否匹配,横线上应填入的代码为( )。

下面代码判断队列的第一个元素是否等于a,并删除该元素,横线上应填写( )。

假设字母表{a,b,c,d,e}在字符串出现的频率分别为10%,15%,30%,16%,29%。若使用哈夫曼编码方式对字母进行二进制编码,则字符abcde分别对应的一组哈夫曼编码的长度分别为( )。
以下C++代码实现n位的格雷码,则横线上应填写( )。


给定一棵二叉树,其前序遍历结果为:ABDECFG,中序遍历结果为:DEBACFG,则这棵树的正确后序遍历结果是( )。
一棵有n个结点的完全二叉树用数组进行存储与表示,已知根结点存储在数组的第1个位置。若存储在数组第9个位置的结点存在兄弟结点和两个子结点,则它的兄弟结点和右子结点的位置分别是( )。
二叉树的深度定义为从根结点到叶结点的最长路径上的结点数,则以下基于二叉树的深度优先搜索实现的深度计算函数中横线上应填写( )。
// 定义二叉树的结点结构
struct tree_node {
int val;
tree_node* left;
tree_node* right;
tree_node(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 计算二叉树的深度
int max_depth(tree_node* root) {
if (root == nullptr) {
return 0; // 如果根结点为空,则深度为 0
}
int left_depth = max_depth(root->left);
int right_depth = max_depth(root->right);
———————————————————————— // 在此处填入代码
}
上一题的二叉树深度计算还可以采用二叉树的广度优先搜索来实现。以下基于二叉树的广度优先搜索实现的深度计算函数中横线上应填写( )。

二叉搜索树中的每个结点,其左子树的所有结点值都小于该结点值,右子树的所有结点值都大于该结点值。以下代码对给定的整数数组构造一个对应的二叉搜索树,横线上应填写()

对上题中的二叉搜索树,当输入数组为[5,3,7,1,4,6,8]时,构建二叉搜索树,并采用如下代码实现的遍历方式,得到的输出是( )。

动态规划通常用于解决( )。
阅读以下用动态规划解决的0-1背包问题的函数,假设背包的容量W是10kg,假设输入4个物品的重量分别为2,3,5,7(单位为kg),每个物品对应的价值分别为20,30,50,60 ,则函数的输出为( )。


C++、Python和JAVA等都是面向对象的编程语言。
在C++中,类的静态成员变量只能被该类对象的成员函数访问。
栈是一种线性结构,可通过数组或链表来实现。二者相比,数组实现占用的内存较少,链表实现的入队和出队操作的时间复杂度较低。
运行以下C++代码,屏幕将输出"derived class"。
#include <iostream>
using namespace std;
class base {
public:
virtual void show() {
cout << "base class" << endl;
}
};
class derived : public base {
public:
void show() override {
cout << "derived class" << endl;
}
};
int main() {
base* b;
derived d;
b = &d;
b->show();
return 0;
}
如下列代码所示的基类(base)及其派生类(derived),则生成一个派生类的对象时,只调用派生类的构造函数。

哈夫曼编码本质上是一种贪心策略。
如果根结点的深度记为1,则一棵恰有8个叶结点的二叉树的深度最少是4。
在非递归实现的树的广度优先搜索中,通常使用栈来辅助实现。
状态转移方程是动态规划的核心,可以通过递推方式表示问题状态的变化。
应用动态规划算法时,识别并存储重叠子问题的解是必须的。
小杨和整数拆分
小杨有一个正整数n,小杨想将它拆分成若干完全平方数的和,同时小杨希望拆分的数量越少越好。小杨请你编写程序计算出总和为n的完全平方数的最少数量。
第一行包含一个正整数n,含义如题面所示。
输出一个整数,代表总和为n的完全平方数的最少数量。
【样例输入】 18 【样例输出】 2 【样例解释】 18=9+9,其中最少需要2个完全平方数。 对于全部数据,保证有1≤n≤10^5。
算法学习
小杨计划学习m种算法,为此他找了n道题目来帮助自己学习,每道题目至多学习一次。小杨对于m种算法的初始掌握程度均为0。第i道题目有对应的知识点a_i,即学习第i道题目可以令小杨对第a_i种算法的掌握程度提高b_i。小杨的学习目标是对m种算法的掌握程度均至少为k。小杨认为连续学习两道相同知识点的题目是不好的,小杨想请你编写程序帮他计算出他最少需要学习多少道题目才能使得他在完成学习目标的同时避免连续学习两道相同知识点的题目。
第一行三个正整数m, n, k,代表算法种类数,题目数和目标掌握程度。 第二行n个正整数a_i,代表每道题目的知识点。 第三行n个正整数b_i,代表每道题目提升的掌握程度。
输出一个整数,代表小杨最少需要学习题目的数量,如果不存在满足条件的方案,输出-1。
【样例1输入】 3 5 10 1 1 2 3 3 9 1 10 10 1 【样例1输出】 4 【样例1解释】 一种最优学习顺序为第一道题,第三道题,第四道题,第二道题。 【样例2输入】 2 4 10 1 1 1 2 1 2 7 10 【样例2输出】 -1 对于全部数据,保证有1≤m≤n≤10^5,1≤k≤10^9。