2024年3月 GESP C++ 6级认证考试真题(含编程操作题部分)
选 单选题(共 15 题,每题 2 分)
在构建哈夫曼树时,每次应该选择( )合并。
面向对象的编程思想主要包括以下哪些原则( )?
在队列中,元素的添加和删除是按照( )原则进行的。
给定一个简单的类定义如下,( )语句在类的外部正确地创建了一个 Circle 对象并调用了 getArea 函
数?
class Circle {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() {
return 3.14 * radius * radius;
}
};
以下代码希望能在一棵二叉排序树中搜索特定的值,请在横线处填入( ),使其能正确实现相应功能。
TreeNode* search(TreeNode* root, int target) {
if (root == NULL || root->val == target) {
return root;
}
if (_______________) {
return search(root->left, target);
} else {
return search(root->right, target);
}
}
位格雷编码的正确顺序是( )。
以下动态规划算法的含义与目的是( )。
int function(vector<int>& nums) {
int n = nums.size();
if (n == 0)
return 0;
if (n == 1)
return nums[0];
vector<int> dp(n, 0);
dp[0] = nums[0];
dp[1] = max(nums[0], nums[1]);
for (int i = 2; i < n; ++i) {
dp[i] = max(dp[i - 1], nums[i] + dp[i - 2]);
}
return dp[n - 1];
}
阅读以下广度优先搜索的代码:
void bfs(TreeNode* root) {
if (root == NULL) {
return;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* current = q.front();
q.pop();
cout << current->val << " ";
if (current->left) {
q.push(current->left);
}
if (current->right) {
q.push(current->right);
}
}
}
使用以上算法遍历以下这棵树,可能的输出是( )。
1
/ \
2 3
/ \ \
8 9 6
/ \ \
4 5 7
/ \
10 11
给定一个空栈,执行以下操作序列:
操作序列:push(1), push(2), push(3), pop(), pop(), push(4), push(5), pop()
最终栈中的元素是( )。
一个有 124 个叶⼦节点的完全二叉树,最多有( )个结点。
在求解最优化问题时,动态规划常常涉及到两个重要性质,即最优⼦结构和( )。
若一棵二叉树的先序遍历为:A, B, D, E, C, F、中序遍历为:D, B, E, A, F, C,它的后序遍历为( )。
线性筛法与埃⽒筛法相比的优势是( )。
以下代码使用了辗转相除法求解最大公因数,请在横线处填入( ),使其能正确实现相应功能。
int gcd(int a, int b) {
while (b != 0) {
______________________
}
return a;
}
下面的代码片段用于反转单链表,请进行( )修改,使其能正确实现相应功能。
ListNode* reverseLinkedList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* current = head;
while (current != nullptr) {
ListNode* next = current->next;
current->next = next;
prev = current;
current = next;
}
return prev;
}
判 判断题(共 10 题,每题 2 分)
哈夫曼树是一种二叉树。
在动态规划中,状态转移方程的作用是定义状态之间的关系。
继承是将已有类的属性和方法引入新类的过程。
完全二叉树的任意一层都可以不满。
删除单向链表中的节点,只需知道待删除节点的地址即可,无需访问前一个节点。
在宽度优先搜索中,通常使用队列来辅助实现。
哈夫曼编码的主要应用领域是有损数据压缩。
二叉搜索树的查找操作的时间复杂度是 。
栈的基本操作包括入栈(push)和出栈(pop)。
使用哈夫曼编码对一些字符进行编码,如果两个字符的频率差异最大,则它们的编码可能出现相同的前
缀。
编 编程操作题(共 2 题,共 50 分)
试题名称:游戏
输入格式
⼀⾏四个正整数 。保证 。
输出格式
⼀⾏⼀个整数,表⽰不同的游戏操作序列数量对 取模的结果。
3.1.4 样例1
1 1 1 1 1
1 1
3.1.5 样例2
1 114 51 4 1
1 176
3.1.6 样例3
1 114514 191 9 810
1 384178446
数据范围
对于 的测试点,保证 , 。
对于 的测试点,保证 , 。
对于所有测试点,保证 。
试题名称:好⽃的⽜
样例解释
你可以留下 个⽜棚,并如此安排你的⽜:
牛棚 牛棚 牛棚 牛棚
⽜ ⽜
3.2.8 样例输入 2
1 3
2 1 2 3
3 3 2 1
3.2.9 样例输出 2
1 7
3.2.10 数据规模
对于 的测试点,保证 ;
对于另外 的测试点,保证 ;
对于 的测试点,保证 ;
对于所有测试点,保证 , 。