返回试卷目录

需要电子版时点「打印 / 保存为 PDF」,在打印对话框的「目标打印机」里选择「另存为 PDF」即可下载。登录后可下载,每天 10 次

GESP C++ 编程七级 · 2026 年 6 月卷

GESP · C++ · 共 27 题 · 满分 100 分

姓名:____________日期:____________得分:____________

  1. 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.单选题2 分

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

    • A.sqrt(49)的返回值可以参与浮点运算。
    • B.log2(32)的返回值类型为int 。
    • C.pow(2, 5)的返回值类型一定为int 。
    • D.sin(90)的参数90表示90度。
  3. 3.单选题2 分

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

    • A.函数形参一定和实参使用同一块内存。
    • B.值传递时,在函数内修改形参一定会修改实参。
    • C.引用形参绑定到实参后,在函数内修改引用形参通常会影响实参。
    • D.指针形参不能用于修改实参指向的数据。
  4. 4.单选题2 分

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

    • A.62
    • B.64
    • C.67
    • D.69
  5. 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. 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. 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. 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. 9.单选题2 分

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

    • A.冒泡排序在只交换相邻逆序元素时是稳定排序
    • B.选择排序一定是稳定排序
    • C.快速排序一定是稳定排序
    • D.稳定排序一定会改变相等元素的相对顺序
  10. 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. 11.单选题2 分

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

    • A.0
    • B.4
    • C.5
    • D.6
  12. 12.单选题2 分

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

    • A.线性探测法发生冲突后,只能放弃插入该元素。
    • B.链地址法可以把哈希到同一位置的多个元素组织在同一个桶中。
    • C.只要哈希表长度是素数,就一定不会发生冲突。
    • D.开放定址法查找元素时不需要考虑冲突位置。
  13. 13.单选题2 分

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

    • A.O(n)
    • B.O(n log n)
    • C.O(n²)
    • D.O(log n)
  14. 14.单选题2 分

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

    • A.令闭区间右边界变为mid - 1
    • B.令闭区间左边界变为mid + 1
    • C.立即返回mid
    • D.交换a[mid]与x
  15. 15.单选题2 分

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

    • A.5
    • B.6
    • C.7
    • D.8
  16. 16.判断题2 分

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

  17. 17.判断题2 分

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

  18. 18.判断题2 分

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

  19. 19.判断题2 分

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

  20. 20.判断题2 分

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

  21. 21.判断题2 分

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

  22. 22.判断题2 分

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

  23. 23.判断题2 分

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

  24. 24.判断题2 分

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

  25. 25.判断题2 分

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

  26. 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. 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。

    作答说明:按题目要求完成程序或作品;需要在线运行与自动判分时,可在站内选择「在线考试」。