GESP C++ 编程七级 · 2026 年 6 月卷
GESP · C++ · 共 27 题 · 满分 100 分
姓名:____________日期:____________得分:____________
- 1.单选题2 分
下列 C++ 代码的输出结果是( )。 #include <iostream> #include <cmath> using namespace std; int main() { cout << (int)(sqrt(50) + log2(8)); return 0; }
- A.9
- B.10
- C.11
- D.12
- 2.单选题2 分
下列关于<cmath>或<math.h>中的数学库函数的说法,正确的是( )。
- A.sqrt(49)的返回值可以参与浮点运算。
- B.log2(32)的返回值类型为int 。
- C.pow(2, 5)的返回值类型一定为int 。
- D.sin(90)的参数90表示90度。
- 3.单选题2 分
下列关于 C++ 函数参数传递的说法,正确的是( )。
- A.函数形参一定和实参使用同一块内存。
- B.值传递时,在函数内修改形参一定会修改实参。
- C.引用形参绑定到实参后,在函数内修改引用形参通常会影响实参。
- D.指针形参不能用于修改实参指向的数据。
- 4.单选题2 分
有 5 个字符,它们出现的次数分别为 3、4、7、8、9。使用哈夫曼编码时,最小的带权路径长度 WPL 为( )。
- A.62
- B.64
- C.67
- D.69
- 5.单选题2 分
已知网格上每个网格点有一个数字, a[i][j]表示第i行第j列处网格点上的数字。若dp[i][j]表示从网格左上角(第0行第0列)走到第i行第j列时能取得的最大数字和,且每次只能向右或向下移动。对于i > 0且j > 0的位置,正确的状态转移代码为( )。
- A.dp[i][j] = a[i][j] + min(dp[i - 1][j], dp[i][j - 1])
- B.dp[i][j] = max(dp[i - 1][j - 1], dp[i][j])
- C.dp[i][j] = a[i][j] + max(dp[i - 1][j], dp[i][j - 1])
- D.dp[i][j] = a[i][j] + dp[i - 1][j - 1]
- 6.单选题2 分
已知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]的值为( )。
- A.10
- B.11
- C.12
- D.22
- 7.单选题2 分
下面代码是一维数组优化 0/1 背包的核心片段,其中w[i]表示第i件物品的重量, v[i]表示第i件物品的价值。横线处应填入( )。 for (int i = 1; i <= n; i++) { for (int c = W; c >= w[i]; c--) { __________; } }
- A.dp[c] = max(dp[c], dp[c + w[i]] + v[i])
- B.dp[c] = min(dp[c], dp[c - w[i]] + v[i])
- C.dp[c] = dp[c - w[i]] + v[i]
- D.dp[c] = max(dp[c], dp[c - w[i]] + v[i])
- 8.单选题2 分
下面程序片段主要体现的算法思想是( )。 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); } }
- A.泛洪算法
- B.二分查找
- C.贪心算法
- D.归并排序
- 9.单选题2 分
下列关于排序稳定性的说法,正确的是( )。
- A.冒泡排序在只交换相邻逆序元素时是稳定排序
- B.选择排序一定是稳定排序
- C.快速排序一定是稳定排序
- D.稳定排序一定会改变相等元素的相对顺序
- 10.单选题2 分
无向图的边为(1, 2), (1, 3), (2, 4), (3, 4), (4, 5) 。从顶点1开始进行 BFS,每轮根据出队顶点,将与其相邻顶点按编号从小到大入队,则顶点4第一次入队时,队列的状态为( )。
- A.1, 2, 3, 4
- B.2, 3, 4
- C.3, 4
- D.3, 4, 5
- 11.单选题2 分
一个长度为11 、下标为0到10的哈希表采用线性探测法处理冲突,哈希函数为h(x) = x % 11 。依次插入22 、 33 、 4 、 15 、 26 ,则26最终存放在下标( )。
- A.0
- B.4
- C.5
- D.6
- 12.单选题2 分
关于哈希表处理冲突的方法,下列说法正确的是( )。
- A.线性探测法发生冲突后,只能放弃插入该元素。
- B.链地址法可以把哈希到同一位置的多个元素组织在同一个桶中。
- C.只要哈希表长度是素数,就一定不会发生冲突。
- D.开放定址法查找元素时不需要考虑冲突位置。
- 13.单选题2 分
某算法需要枚举 n 个对象;对每个对象,还需要进行一次二分查找。若二分查找的对象规模也是 n,则该算法的时间复杂度通常为( )。
- A.O(n)
- B.O(n log n)
- C.O(n²)
- D.O(log n)
- 14.单选题2 分
在升序数组中用二分查找第一个大于等于x的位置。若当前中点mid满足a[mid] < x ,下一步应()。
- A.令闭区间右边界变为mid - 1
- B.令闭区间左边界变为mid + 1
- C.立即返回mid
- D.交换a[mid]与x
- 15.单选题2 分
在如下网格中, #表示不能经过的格子, .表示可以经过的格子。从左上角走到右下角,每次只能向右或向下移动,不同路径共有( )条。 . . . . . . # . # . . . . . . # . # . . . . . . .
- A.5
- B.6
- C.7
- D.8
- 16.判断题2 分
使用cmath或math.h中的三角函数时,角度参数默认采用角度制。
- 17.判断题2 分
使用cmath或math.h中的pow(2, 10)计算时,由于参数均为整型int ,返回值类型也为整型int 。
- 18.判断题2 分
0/1 背包使用一维数组优化时,容量从小到大枚举也能保证每件物品最多被选一次。
- 19.判断题2 分
哈希表采用开放定址法时,即使哈希函数设计合理,也仍然可能发生冲突。
- 20.判断题2 分
同一个图从同一个起点进行深度优先搜索,访问序列一定与邻接点的枚举顺序无关。
- 21.判断题2 分
泛洪算法可以用递归 DFS 实现,但地图很大时可能由于递归层数过深导致调用栈溢出等运行时错误。
- 22.判断题2 分
哈夫曼树中不存在度为1的结点。
- 23.判断题2 分
冒泡排序的常见实现是稳定排序,选择排序也是。
- 24.判断题2 分
在无权图中从起点执行 BFS 时,某个顶点第一次被访问到的层数等于起点到该顶点经过的最少边数。
- 25.判断题2 分
在二维动态规划中,状态dp[i][j]的计算常常依赖其他状态,这些状态的计算必须在完成dp[i][j]的计算前完成。
- 26.编程题25 分
试题名称:染色 时间限制:1.0 s 内存限制:512.0 MB 题目描述:小杨同学有一张包含 n 个结点的无向图 G,G 中的结点依次以 1, 2, …, n 编号。 小杨同学发现 G 中每个结点的度数都是 2。显然 G 中恰好有 n 条边。 小杨同学想为 G 中的结点染色,使得任意一条边两端的结点都有不同的颜色。 小杨同学想知道最少需要多少种颜色才能在满足条件的前提下为 G 染色。 输入格式:本题包含多组数据。 第一行,一个正整数 t,表示数据组数。 对于每组数据: 第一行,一个正整数 n,表示无向图 G 中的结点数。 接下来 n 行,每行两个正整数 u_i, v_i,表示一条连接结点 u_i 与 v_i 的无向边,整数之间以空格分隔。 保证 G 中没有重边与自环。 输出格式:对于每组数据:输出一行,一个整数,表示在满足条件的前提下为 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 数据范围:对于 40% 的测试点,保证 ∑n ≤ 500,∑n 指每个输入中多组数据的 n 的总和。 对于所有测试点,保证 1 ≤ t ≤ 100,3 ≤ n ≤ 10^5,∑n ≤ 10^5。保证 G 中没有重边与自环。
作答说明:按题目要求完成程序或作品;需要在线运行与自动判分时,可在站内选择「在线考试」。
- 27.编程题25 分
试题名称:消消乐 时间限制:1.0 s 内存限制:512.0 MB 题目描述:给定一个由 n 个整数构成的数组 a = [a_1, …, a_n]。每次你可以对数组 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 个非负整数 a_1, …, a_n,表示数组 a 中的整数。 输出格式:输出一行,一个整数,表示能获得的最大分数总和。 输入样例1:6 1 6 3 2 9 1 输出样例1:55 输入样例2:5 3 1415 926 53 58 输出样例2:5771 数据范围:对于 40% 的测试点,保证 1 ≤ n ≤ 50,0 ≤ a_i ≤ 10^3。 对于所有测试点,保证 1 ≤ n ≤ 100,0 ≤ a_i ≤ 10^9。
作答说明:按题目要求完成程序或作品;需要在线运行与自动判分时,可在站内选择「在线考试」。