CCF GESP 2024年3月认证 C++ 6级
一
单选题
第 1 题
在构建哈夫曼树时,每次应该选择( )合并。
第 2 题
面向对象的编程思想主要包括以下哪些原则( )?
第 3 题
队列中,元素的添加和删除是按照( )原则进行的。
第 4 题
给定一个简单的类定义如下,( )语句在类的外部正确地创建了一个 Circle 对象并调用了 getArea 函数?
class Circle {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double getArea() {
return 3.14 * radius * radius;
}
};
第 5 题
以下代码希望能在一棵二叉排序树中搜索特定的值。请在横线处填入( ),使其能正确实现相应功能。
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);
}
}
第 6 题
3 位格雷编码的正确顺序是( )。
第 7 题
以下动态规划算法的含义与目的是( )。
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];
}
第 8 题
阅读以下广度优先搜索的代码:
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
第 9 题
给定一个空栈,执行以下操作序列:
操作序列:push(1),push(2),push(3),pop(),pop(),push(4),push(5),pop()
最终栈中的元素是( )。
第 10 题
一个有 124 个叶子节点的完全二叉树,最多有( )个结点。
第 11 题
在求解最优化问题时,动态规划常常涉及到两个重要性质,即最优子结构和( )。
第 12 题
若一棵二叉树的先序遍历为:A, B, D, E, C, F、中序遍历为:D, B, E, A, F, C,它的后序遍历为( )。
第 13 题
线性筛法与埃氏筛法相比的优势是( )。
第 14 题
以下代码使用了辗转相除法求解最大公因数,请在横线处填入( ),使其能正确实现相应功能。
int gcd(int a, int b) {
while (b != 0) {
________________________
}
return a;
}
第 15 题
下面的代码片段用于反转单链表,请进行( )修改,使其能正确实现相应功能。
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;
}
单选题部分已到底了。