信奥刷题站
GESP 认证 7级2025-09

2025年9月 GESP C++ 7级

题量
27 题
客观题
25 题
建议时长
60 分钟
卷面总分
100 分

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

开始整卷模拟计时作答 · 交卷即时判分 · 错题自动进错题本(需登录)2 道编程大题:在线只判客观题,编程题请自行前往洛谷等 OJ 提交验证

// questions

题目预览

1
单选题2

已知小写字母 bbb 的 ASCII 码为 989898,下列 C++ 代码的输出结果是( )。

#include <iostream>
using namespace std;
int main() {
    char a = 'b' + 1;
    cout << a;
    return 0;
}
A

bbb

B

ccc

C

989898

D

999999

2
单选题2

已知 aaaint 类型变量,pppint * 类型变量,下列表达式不符合语法的是( )。

A

a * a

B

p * p

C

a && a

D

p && p

3
单选题2

下列关于 C++ 类的说法,错误的是( )。

A

如果一个类包含纯虚函数,则它不能包含成员变量。

B

如果一个类包含纯虚函数,则不能用它定义对象。

C

派生类对象占用的内存总是不小于基类对象。

D

派生类可以不实现基类的虚函数。

4
单选题2

已知数组 a 的定义 int a[10] = {-1};,下列说法不正确的是( )。

A

数组 a 至少占用 101010int 大小的内存,一般为 404040 个字节。

B

数组 a 的所有元素均被初始化为 −1-11

C

语句 a[-1] = 0; 不会产生编译错误,但会导致难以预测的运行结果。

D

语句 a[13] = 0; 不会产生编译错误,但会导致难以预测的运行结果。

5
单选题2

一棵完全二叉树有 165165165 个结点,则叶结点有多少个?( )

A

383838

B

828282

C

838383

D

848484

6
单选题2

下列关于二叉树的说法,错误的是( )。

A

二叉排序树的中序遍历顺序与元素排序的顺序是相同的。

B

自平衡二叉查找树(AVL 树)是一种二叉排序树。

C

nnn 个元素的二叉排序树,其高一定为 log⁡2n\log_2 nlog2n

D

任意的森林,都可以映射为一颗二叉树进行表达和存储。

7
单选题2

下列关于树和图的说法,错误的是( )。

A

保留树的所有节点,并把树的每个节点指向其父节点,则可以将树转换为一个有向弱连通图。

B

保留树的所有节点,并把树的每个节点指向其子节点,则可以将树转换为一个有向无环图。

C

每个连通图都存在生成树。

D

每个存在生成树的有向图,都一定是强连通的。

8
单选题2

对一个包含 nnn 个顶点、 mmm 条边的图,执行广度优先搜索,其最优时间复杂度是( )。

A
B
C
D
9
单选题2

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

A

用新元素覆盖发生冲突的哈希表项。

B

在每个哈希表项处,使用单链表管理该表项的冲突元素。

C

建立额外的单链表,用来管理所有发生冲突的元素。

D

使用不同的哈希函数再建立一个哈希表,用来管理所有发生冲突的元素。

10
单选题2

以下关于贪心法和动态规划的说法中,错误的是( )。

A

对特定的问题,贪心法不一定适用。

B

当特定的问题适用贪心法时,通常比动态规划的时间复杂度更低。

C

对很多问题,递推实现和递归实现动态规划方法的时间复杂度相当。

D

采用动态规划的算法一定具有多项式时间复杂度。

11
单选题2

下面程序的输出为( )。

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

888

B

131313

C

212121

D

无法正常结束。

12
单选题2

下面程序的时间复杂度为( )。

int rec_fib[MAX_N];
int fib(int n) {
    if (n <= 1)
        return n;
    if (rec_fib[n] != 0)
        return rec_fib[n];
    return fib(n - 1) + fib(n - 2);
}
A
B
C
D
13
单选题2

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

int sieve[MAX_N];
void init_sieve(int n) {
    for (int i = 1; i <= n; i++)
        sieve[i] = i;
    for (int i = 2; i <= n; i++)
        for (int j = i; j <= n; j += i)
            sieve[j]--;
}
A
B
C
D
14
单选题2

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

int gcd(int m, int n) {
    if (m == 0) return n;
    return gcd(n % m, m);
}
int count_triple(int n) {
    int cnt = 0;
    for (int v = 1; v * v * 4 <= n; v++)
        for (int u = v + 1; u * (u + v) * 2 <= n; u += 2)
            if (gcd(u, v) == 1) {
                int a = u * u - v * v;
                int b = u * v * 2;
                int c = u * u + v * v;
                cnt += n / (a + b + c);
            }
    return cnt;
}
A
B
C
D
15
单选题2

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

A

222, 333, 555, 777, 888, 999, 666, 444, 111

B

555, 777, 888, 999, 111, 222, 444, 333, 666

C

666, 888, 999, 555, 777, 111, 222, 333, 444

D

888, 555, 777, 999, 111, 222, 333, 666, 444

16
判断题2

C++ 语言中,表达式 9 && 12 的结果类型为 int、值为 888

17
判断题2

C++ 语言中,在有 int a[10]; 定义的范围内,通过表达式 a[-1] 进行访问将导致编译错误。

18
判断题2

选择排序一般是不稳定的。

19
判断题2

C++ 语言中,floatint 类型一般都是 4 字节,因此 float 类型能够表达不同的浮点数值的数量,与 int 类型能够表达不同的整数值的数量是相同的。

20
判断题2

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

21
判断题2

一棵有 nnn 个节点的完全二叉树,则树的深度为 ⌊log⁡2n⌋+1\lfloor \log_2 n \rfloor + 1log2n+1。( )

22
判断题2

邻接表和邻接矩阵都是图的存储形式。通常,使用邻接表比使用邻接矩阵的时间复杂度更低。

23
判断题2

C++ 语言中,类的构造函数可以声明为私有(private)。

24
判断题2

泛洪算法的递归实现容易造成溢出,因此大的二维地图算法中,一般使用广度优先搜索实现。

25
判断题2

很多游戏中为玩家设置多种可供学习的技能,要学习特定技能又往往需要先学习 111 个或以上的前置技能。尽管这样的技能间依赖关系常被玩家称为“技能树”,但它并不一定是树,更可能是有向无环图。

GESP 编程操作题
26
编程题25

试题名称:连通图

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

题目描述

给定一张包含 nnn 个结点与 mmm 条边的无向图,结点依次以 1,2,…,n1,2,\ldots,n1,2,,n 编号,第 iii 条边(1≤i≤m1\le i\le m1im)连接结点 uiu_iui 与结点 viv_ivi。如果从一个结点经过若干条边可以到达另一个结点,则称这两个结点是连通的。

你需要向图中加入若干条边,使得图中任意两个结点都是连通的。请你求出最少需要加入的边的条数。

注意给出的图中可能包含重边与自环。

输入格式

第一行,两个正整数 n,mn,mn,m,表示图的点数与边数。

接下来 mmm 行,每行两个正整数 ui,viu_i,v_iui,vi,表示图中一条连接结点 uiu_iui 与结点 viv_ivi 的边。

输出格式

输出一行,一个整数,表示使得图中任意两个结点连通所需加入的边的最少数量。

样例输入 #1

4 4
1 2
2 3
3 1
1 4

样例输出 #1

0

样例输入 #2

6 4
1 2
2 3
3 1
6 5

样例输出 #2

2

说明/提示

对于 40%40\%40% 的测试点,保证 1≤n≤1001\le n\le 1001n1001≤m≤1001\le m\le 1001m100

对于所有测试点,保证 1≤n≤1051\le n\le 10^51n1051≤m≤1051\le m\le 10^51m105

本题为编程大题:请复制题面到洛谷 / GESP OJ 等平台编写并提交代码(本站不判分)
27
编程题25

试题名称:金币收集

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

题目描述

小 A 正在游玩收集金币的游戏。具体来说,在数轴上将会出现 nnn 枚金币,其中第 iii 枚(1≤i≤n1\le i\le n1in)金币将会在时刻 tit_iti 出现在数轴上坐标为 xix_ixi 的位置。小 A 必须在时刻 tit_iti 恰好位于坐标 xix_ixi,才可以获得第 iii 枚金币。

游戏开始时为时刻 000,此时小 A 的坐标为 000。正常来说,小 A 可以按游戏机的按键在数轴上左右移动,但不幸的是游戏机的左方向键失灵了。小 A 每个时刻只能选择保持不动,或是向右移动一个单位。换言之,如果小 A 在时刻 ttt 的坐标为 xxx,那么他在时刻 t+1t+1t+1 的坐标只能是 xxx 或是 x+1x+1x+1 二者之一,分别对应保持不动和向右移动。

小 A 想知道他最多能收集多少枚金币。你能帮他收集最多的金币吗?

输入格式

第一行,一个正整数 nnn,表示金币的数量。

接下来 nnn 行,每行两个正整数 xi,tix_i,t_ixi,ti,分别表示金币出现的坐标与时刻。

输出格式

输出一行,一个整数,表示小 A 最多能收集的金币数量。

样例输入 #1

3
1 6
3 7
2 4

样例输出 #1

2

样例输入 #2

4
1 1
2 2
1 3
2 4

样例输出 #2

3

说明/提示

对于 40%40\%40% 的测试点,保证 1≤n≤81\le n\le 81n8

对于另外 30%30\%30% 的测试点,保证 1≤n≤1001\le n\le 1001n1001≤xi≤1001\le x_i\le 1001xi1001≤ti≤1001\le t_i\le 1001ti100

对于所有测试点,保证 1≤n≤1051\le n\le 10^51n1051≤xi≤1091\le x_i\le 10^91xi1091≤ti≤1091\le t_i\le 10^91ti109

本题为编程大题:请复制题面到洛谷 / GESP OJ 等平台编写并提交代码(本站不判分)