Logo

2024年6月 GESP C++ 7级

GESP · 7级 · 2024-06

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

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

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

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

1

下列 C++ 代码的输出结果是( )。

#include <iostream>
#include <cmath>
using namespace std;
int main() {
    cout << sin(3.1415926 / 2);
    return 0;
}
2

对于如下图的二叉树,说法正确的是( )。

3

已知两个序列 $s1 = {1, 3, 4, 5, 6, 7, 7, 8, 1}$ 、 $s2 = {3, 5, 7, 4, 8, 2, 9, 5, 1}$ ,则它们的最长公共子序列是( )。

4

关于序列{2,7,1,5,6,4,3,8,9},以下说法错误的是( )。

5

关于图的深度优先搜索和广度优先搜索,下列说法错误的是( )。

6

对于如下二叉树,下面访问顺序说法错误的是( )。

7

以下哪个方案不能合理解决或缓解哈希表冲突( )。

8

在 C++ 中,关于运算符 &,下面说法正确的是( )。

9

下面关于图的说法正确的是( )。

10

图的存储和遍历算法,下面说法错误的是( )。

11

如下图所示的邻接表结构,表示的是下列哪个选项中的图?

12

如下图所示的邻接矩阵(inf 表示无穷大),表示的是下列哪个选项中的图?

13

下面程序的输出为( )。

#include <iostream>
using namespace std;
int fib(int n) {
    if (n <= 1)
        return n;
    return fib(n - 1) + fib(n - 2);
}
int main() {
    cout << fib(6) << endl;
    return 0;
}
14

下面 count_triple 函数的时间复杂度为( )。

int count_triple(int n) {
    int cnt = 0;
    for (int a = 1; a <= n; a++)
        for (int b = a; a + b <= n; b++) {
            int c = sqrt(a * a + b * b);
            if (a + b + c > n)
                break;
            if (a * a + b * b == c * c)
                cnt++;
        }
    return cnt;
}
15

下列选项中,哪个可能是下图的深度优先遍历序列( )。

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

16

C++ 语言中,表达式 6 & 5 的结果类型为 int、值为 $1$。

17

冒泡排序是稳定的排序算法。

18

唯一分解定理(算术基本定理)指出,每个大于 $1$ 的自然数都可以唯一地分解成若干个素数的乘积。因此,我们可以很容易的对给定的自然数 $n$ 进行质因数分解,时间复杂度仅为 $O(\sqrt{n})$。

19

C++ 语言中,可以为同一个类定义多个构造函数。

20

使用 math.hcmath 头文件中的对数函数,表达式 log(128) 的结果类型为 double、值约为 $7.0$。

21

一颗 $N$ 层的二叉树,至少有 个节点。

22

非连通图不能使用广度优先搜索算法进行遍历。

23

现使用有 $N$ 个表项的哈希表,从 $M$ 个元素中进行查找。该哈希表为解决哈希函数冲突,为每个表项处建立单链表存储冲突元素。其查找操作的最坏情况时间复杂度为 。

24

动态规划有递推实现和递归实现,对于很多问题,通过记录子问题的解,两种实现的时间复杂度是相同的。

25

泛洪算法的递归方法容易造成溢出,因此大的二维地图算法中,一般不用递归方法。

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

26
编程操作题 25分

试题名称:黑白翻转

时间限制:1.0 s | 内存限制:512.0 MB

题目描述

小杨有一棵包含 $n$ 个节点的树,这棵树上的任意一个节点要么是白色,要么是黑色。小杨认为一棵树是美丽树当且仅当在删除所有白色节点之后,剩余节点仍然组成一棵树。

小杨每次操作可以选择一个白色节点将它的颜色变为黑色,他想知道自己最少要执行多少次操作可以使得这棵树变为美丽树。

输入格式

第一行包含一个正整数 $n$,代表树的节点数。

第二行包含 $n$ 个非负整数 $a_1,a_2,\ldots,a_n$,其中如果 $a_i=0$,则节点 $i$ 的颜色为白色,否则为黑色。

之后 $n-1$ 行,每行包含两个正整数 $x_i,y_i$,代表存在一条连接节点 $x_i$ 和 $y_i$ 的边。

输出格式

输出一个整数,代表最少执行的操作次数。

样例输入 #1

5
0 1 0 1 0
1 2
1 3
3 4
3 5

样例输出 #1

2

说明/提示

样例解释

将节点 $1$ 和 $3$ 变为黑色即可使这棵树变为美丽树,此时删除白色节点 $5$,剩余黑色节点仍然组成一棵树。

数据范围
子任务编号|数据点占比|$n$ |$a_i$ |特殊条件
:-:|:-:|:-:|:-:|:-:
$1$|$30%$ |$\leq 10^5$ | $0\leq a_i\leq 1$|树的形态为一条链
$2$|$30%$ | $\leq 10^5$ | $0\leq a_i\leq 1$| 只有两个节点颜色为黑色
$3$|$40%$|$\leq 10^5$|$0\leq a_i\leq 1$|

对于全部数据,保证有 $1\leq n\leq 10^5$,$0\leq a_i\leq 1$。

27
编程操作题 25分

试题名称:区间乘积

时间限制:1.0 s | 内存限制:500.0 MB

题目描述

小杨有一个包含 $n$ 个正整数的序列 $A=[a_1,a_2,\ldots,a_n]$。

小杨想知道有多少对 $\langle l,r\rangle(1\leq l\leq r\leq n)$ 满足 $a_l\times a_{l+1}\times\ldots\times a_r$ 为完全平方数。

一个正整数 $x$ 为完全平方数当且仅当存在一个正整数 $y$ 使得 $x=y\times y$。

输入格式

第一行包含一个正整数 $n$,代表正整数个数。

第二行包含 $n$ 个正整数 $a_i$,代表序列 $A$。

输出格式

输出一个整数,代表满足要求的 $\langle l,r\rangle$ 数量。

样例输入 #1

5
3 2 4 3 2

样例输出 #1

2

说明/提示

样例解释

满足条件的 $\langle l,r\rangle$ 有 $\langle 1,5\rangle$ 和 $\langle 3,3\rangle$。

数据范围

子任务编号|数据点占比|$n$|$a_i$
:-:|:-:|:-:|:-:
$1$|$20%$|$\leq 10^5$|$1\leq a_i\leq 2$
$2$|$40%$|$\leq 100$|$1\leq a_i\leq 30$
$3$|$40%$|$\leq 10^5$|$1\leq a_i\leq 30$

已答 0/27