Logo

2024年3月 GESP C++ 6级

GESP · 6级 · 2024-03

60:00
满分 100
时长 60 分钟
27

2024年3月 GESP C++ 6级认证考试真题(含编程操作题部分)

答题卡 已答 0/27
已答 正确 错误 编程题

单选题(共 15 题,每题 2 分)

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
位格雷编码的正确顺序是( )。
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;
}

判断题(共 10 题,每题 2 分)

16

哈夫曼树是一种二叉树。

17

在动态规划中,状态转移方程的作用是定义状态之间的关系。

18

继承是将已有类的属性和方法引入新类的过程。

19

完全二叉树的任意一层都可以不满。

20

删除单向链表中的节点,只需知道待删除节点的地址即可,无需访问前一个节点。

21

在宽度优先搜索中,通常使用队列来辅助实现。

22

哈夫曼编码的主要应用领域是有损数据压缩。

23

二叉搜索树的查找操作的时间复杂度是 。

24

栈的基本操作包括入栈(push)和出栈(pop)。

25

使用哈夫曼编码对一些字符进行编码,如果两个字符的频率差异最大,则它们的编码可能出现相同的前
缀。

编程操作题(共 2 题,共 50 分)

26
编程操作题 25分

试题名称:游戏

输入格式

⼀⾏四个正整数 。保证 。

输出格式

⼀⾏⼀个整数,表⽰不同的游戏操作序列数量对 取模的结果。
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

数据范围

对于 的测试点,保证 , 。
对于 的测试点,保证 , 。
对于所有测试点,保证 。

27
编程操作题 25分

试题名称:好⽃的⽜

样例解释

你可以留下 个⽜棚,并如此安排你的⽜:
牛棚 牛棚 牛棚 牛棚
⽜ ⽜
3.2.8 样例输入 2
1 3
2 1 2 3
3 3 2 1
3.2.9 样例输出 2
1 7
3.2.10 数据规模
对于 的测试点,保证 ;
对于另外 的测试点,保证 ;
对于 的测试点,保证 ;
对于所有测试点,保证 , 。

已答 0/27