试卷总分:100分


选择题 15题 30分

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15


判断题 10题 20分

16 17 18 19 20 21 22 23 24 25


编程题 2题 50分

26 27

E1097 CCF-GESP编程能力等级认证-C++ -2026-06 CCF-GESP C++七级真题-考试

选择题 共15道

01

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

#include <iostream>
#include <cmath>
using namespace std;
int main() {
	cout << (int)(sqrt(50) + log2(8));
	return 0;
}
2分
登录后查看选项
02

下列关于 <cmath> 或 <math.h> 中的数学库函数的说法,正确的是( )。

2分
登录后查看选项
03

下列关于 C++ 函数参数传递的说法,正确的是( )。

2分
登录后查看选项
04

有 个字符,它们出现的次数分别为 3、 4、 7、 8、 9。使用哈夫曼编码时,最小的带权路径长度 WPL 为( )。

2分
登录后查看选项
05

已知网格上每个网格点有一个数字, a[i][j] 表示第 i 行第 j 列处网格点上的数字。若 dp[i][j] 表示从网格左上角(第 0 行第 0 列)走到第 i 行第 j 列时能取得的最大数字和,且每次只能向右或向下移动。对于 i > 0 且 j > 0 的位置,正确的状态转移代码为( )。

2分
登录后查看选项
06

已知 f[0] = 0 , f[1] = 2 ,并且对 i >= 2 有 f[i] = max(f[i - 1], f[i - 2] + a[i]) 。若a[1 .. 5] = {2, 7, 9, 3, 1} ,则 f[5] 的值为( )。

2分
登录后查看选项
07

下面代码是一维数组优化 0/1 背包的核心片段,其中 w[i] 表示第 i 件物品的重量, v[i] 表示第 i 件物品的价值。横线处应填入( )。

for (int i = 1; i <= n; i++) {
	for (int c = W; c >= w[i]; c--) {
		__________;
	}
}
2分
登录后查看选项
08

下面程序片段主要体现的算法思想是( )。

void dfs(int x, int y) {
	vis[x][y] = true;
	for (int k = 0; k < 4; k++) {
		int nx = x + dx[k], ny = y + dy[k];
		if (inside(nx, ny) && a[nx][ny] == 1 && !vis[nx][ny])
			dfs(nx, ny);
	}
}
2分
登录后查看选项
09

下列关于排序稳定性的说法,正确的是( )。

2分
登录后查看选项
10

无向图的边为 (1, 2), (1, 3), (2, 4), (3, 4), (4, 5) 。从顶点 1 开始进行 BFS,每轮根据出队顶点,将与其相邻顶点按编号从小到大入队,则顶点 4 第一次入队时,队列的状态为( )。

2分
登录后查看选项
11

题 一个长度为 11 、下标为 0 到 10 的哈希表采用线性探测法处理冲突,哈希函数为 h(x) = x % 11 。依次插入 22 、 33 、 4 、 15 、 26 ,则 26 最终存放在下标( )。

2分
登录后查看选项
12

关于哈希表处理冲突的方法,下列说法正确的是( )。

2分
登录后查看选项
13

某算法需要枚举 n 个对象;对每个对象,还需要进行一次二分查找。若二分查找的对象规模也是 n,则该算法的时间复杂度通常为( )。

2分
登录后查看选项
14

在升序数组中用二分查找第一个大于等于 x 的位置。若当前中点 mid 满足 a[mid] < x ,下一步应( )。

2分
登录后查看选项
15

在如下网格中, # 表示不能经过的格子, . 表示可以经过的格子。从左上角走到右下角,每次只能向右或向下移动,不同路径共有( )条。

. . . . .
. # . # .
. . . . .
# . # . .
. . . . .
2分
登录后查看选项

判断题 共10道

16

使用 cmath 或 math.h 中的三角函数时,角度参数默认采用角度制。

2分
登录后查看选项
17

使用 cmath 或 math.h 中的 pow(2, 10) 计算 时,由于参数均为整型 int ,返回值类型也为整型int 。

2分
登录后查看选项
18

0/1 背包使用一维数组优化时,容量从小到大枚举也能保证每件物品最多被选一次。

2分
登录后查看选项
19

哈希表采用开放定址法时,即使哈希函数设计合理,也仍然可能发生冲突。

2分
登录后查看选项
20

同一个图从同一个起点进行深度优先搜索,访问序列一定与邻接点的枚举顺序无关。

2分
登录后查看选项
21

泛洪算法可以用递归 DFS 实现,但地图很大时可能由于递归层数过深导致调用栈溢出等运行时错误。

2分
登录后查看选项
22

哈夫曼树中不存在度为 1 的结点。

2分
登录后查看选项
23

冒泡排序的常见实现是稳定排序,选择排序也是。

2分
登录后查看选项
24

在无权图中从起点执行 BFS 时,某个顶点第一次被访问到的层数等于起点到该顶点经过的最少边数。

2分
登录后查看选项
25

在二维动态规划中,状态 dp[i][j] 的计算常常依赖其他状态,这些状态的计算必须在完成 dp[i][j] 的计算前完成。

2分
登录后查看选项

编程题 共2道

26

染色

题目描述

小杨同学有一张包含 n 个结点的无向图 G,G 中的结点依次以 1,2,...,n 编号。小杨同学发现 G 中每个结点的度数都是 2。显然 G 中恰好有 n 条边。小杨同学想为 G 中的结点染色,使得任意一条边两端的结点都有不同的颜色。

小杨同学想知道最少需要多少种颜色才能在满足条件的前提下为 G 染色。

输入

第一行,一个正整数 t,表示数据组数。

对于每组数据:

第一行,一个正整数 n,表示无向图 G 中的结点数。

接下来 n 行,每行两个正整数 ui,vi,表示一条连接结点 ui 与 vi 的无向边,整数之间以空格分隔。

保证 G 中没有重边与自环。

输出

对于每组数据:输出一行,一个整数,表示在满足条件的前提下为 G 染色需要的最少颜色数。

数据范围

对于所有测试点,保证1≤t≤100,3≤n≤10^5,∑n≤10^5。保证G中没有重边与自环。

输入样例1

4

6

1 6

2 1

3 2

4 3

5 4

6 5

6

1 3

3 5

5 1

2 4

4 6

6 2

3

1 2

2 3

3 1

5

1 4

2 5

3 1

4 2

5 3

输出样例1

2

3

3

3

25分
登录后作答
27

消消乐

题目描述

给定一个由 n 个整数构成的数组 a=[a1,...,an]。每次你可以对数组 a 进行以下操作,直到数组 a 变为空:

  • 指定 a 中的一个元素,获得该元素两侧相邻元素之和的分数,并将该元素从 a 中删去。

特别地,如果相邻元素不存在则该元素的值视为 0。例如,对于 a=[1,2,3] 可以进行以下操作:

  • 指定元素 2,获得分数 1+3,删去 2 后 a=[1,3];
  • 指定元素 1,获得分数 0+3,删去 1 后 a=[3];
  • 指定元素 3,获得分数 0+0,删去 3 后 a 变为空。

请问你能获得的分数总和最大是多少?

输入

第一行,一个正整数 n,表示数组长度。

第二行,n 个非负整数 a1,...an,表示数组 a 中的整数。

输出

输出一行,一个整数,表示能获得的最大分数总和。

数据范围

对于所有测试点,保证1≤n≤100,0≤ai≤10^9。

输入样例1

6

1 6 3 2 9 1

输出样例1

55

输入样例2

5

3 1415 926 53 58

输出样例2

5771

25分
登录后作答