#1700. GESP-C++八级(2026-09)

GESP-C++八级(2026-09)

CCF GESP C++ 八级 (2026 年 09 月)

一、单选题(每题 2 分,共 30 分)

1. ⽤数字 1、2 、3 、 4、 5 组成没有重复数字的三位数,且该三位数能被 3 整除,共有( )个 。

{{ select(1) }}

  • 36
  • 40
  • 44
  • 48

2. 6个⼈围成⼀圈就座,座位没有区分,但区分时针⽅向,且甲、⼄两⼈必须相邻,则共有( )种不同坐 法。

{{ select(2) }}

  • 24
  • 36
  • 48
  • 120

3. 有 堆⽯⼦,数量分别为 、 、 、 。每次可以合并相邻两堆,合并代价为两堆⽯⼦数之和。将所有⽯⼦合 并成⼀堆的最⼩总代价为( )。 A. B. C. D.

{{ select(3) }}

  • 17
  • 19
  • 20
  • 23

4. 某⼆叉树的先序遍历序列为 A B D E C F G ,中序遍历序列为 D B E A F C G ,则其后序遍历序列为 ( )。

{{ select(4) }}

  • D E B F G C A
  • D B E F G C A
  • D E B G F C A
  • D E B F C G A

5. 关于快速幂算法,下列说法正确的是( )

{{ select(5) }}

  • 快速幂可以处理任意负指数的情况
  • 快速幂将指数按⼆进制拆分,能够把乘法次数从朴素乘幂时的 优化为
  • 快速幂只能在模数为质数时使⽤
  • 快速幂的空间复杂度通常为

6. 杨辉三角中,第 ⾏第 个数(⾏、列均从 开始计数)是( ) A. B. C. D.

{{ select(6) }}

  • 21
  • 35
  • 42
  • 56

7. ⼀个长⽅形的长是宽的 倍,周长为 ,则该长⽅形的⾯积为( ) A. B. C. D.

{{ select(7) }}

  • 72
  • 96
  • 108
  • 144

8. 若x+y=7 ,x-y=1 ,则 x*y的值为( ) A. B. C. D.

{{ select(8) }}

  • 7
  • 8
  • 10
  • 12

9. 关于最⼩⽣成树(MST)算法,下列说法正确的是( )

{{ select(9) }}

  • Prim 算法适⽤于稠密图,Kruskal 算法适⽤于稀疏图
  • Prim 算法和 Kruskal 算法得到的最⼩⽣成树边集⼀定完全相同
  • Kruskal 算法必须使⽤邻接矩阵存储图
  • Prim 算法只能处理有向图

10. 某连通带权⽆向简单图的边集合为 $$ { (1, 2, 5), (1, 3, 1), (2, 3, 3), (2, 4, 4), (3, 4, 2), (3, 5, 6), (4, 5, 7) } $$,其中,每 条边的三元组 表⽰结点 和结点 之间有⼀条权值为 的⽆向边。使⽤ Kruskal 算法按边权从⼩到⼤扫 描,第 条被选⼊最⼩⽣成树的边是( )。 A. B. C. D.

{{ select(10) }}

  • (1,2,5)(1, 2, 5)
  • (2,3,3)(2, 3, 3)
  • (3,4,2)(3, 4, 2)
  • (4,5,7)(4, 5, 7)

11. 在使⽤⼩根堆(优先队列)优化的 Dijkstra 算法中,堆中每个元素通常存储的是( )

{{ select(11) }}

  • 顶点编号和该顶点当前的最短距离
  • 边的权值和边的终点
  • 顶点的⼊度
  • ⽗结点编号和边权

12. 在 Floyd 算法的经典三重循环 for (k) for (i) for (j) 中,最外层变量 k 表⽰( )

{{ select(12) }}

  • 当前允许作为中间顶点的最⼤编号(即只允许编号不超过 k 的顶点作为中间点)
  • 当前起点
  • 当前终点
  • 当前最短路径的长度

13. 下列常见复杂度量级,按渐近增长速度从慢到快排列,正确的是( )

{{ select(13) }}

  • O(n2)O(n^2)O(nlogn)O(n \log n)O(n)O(n)O(logn)O(\log n)
  • O(logn)O(\log n)O(n)O(n)O(n2)O(n^2)O(nlogn)O(n \log n)
  • O(logn)O(\log n)O(n)O(n)O(nlogn)O(n \log n)O(n2)O(n^2)
  • O(nlogn)O(n \log n)O(logn)O(\log n)O(n)O(n)O(n2)O(n^2)

14. 对长度为 的数组使⽤差分数组⽀持 次区间加操作,最后通过⼀次前缀和还原每个位置的最终值,整个 过程的渐进时间复杂度为( )。 A. B. C. D.

{{ select(14) }}

  • O(mn)O(mn)
  • O((n+m)logn)O((n + m) \log n)
  • O(nlogm)O(n \log m)
  • O(n+m)O(n + m)

15. 下列程序的输出结果为( )

#include <iostream>
using namespace std;
class A {
    public:
    A() {
        cout << "A";
    }
    ~A() {
        cout << "~A";
    }
};
class B : public A {
    public:
    B() {
        cout << "B";
    }
    ~B() {
        cout << "~B";
    }
};
int main() {
    B b;
    return 0;
}

{{ select(15) }}

  • BA~A~B
  • BA~B~A
  • AB~A~B
  • AB~B~A

二、判断题(每题 2 分,共 20 分)

1. 从 本不同的书中选出 3 本,分别分给甲、⼄、丙 3 ⼈,每⼈⾄多 P(4,3)=24本,共有 种不同分法

{{ select(16) }}

2. 对任意正整数 nn,二项式 (a+b)n(a+b)^n 的展开式中,按项序从第 0 项起计数,奇数项系数之和等于偶数项系数之和。

{{ select(17) }}

3. 若一个连通无向图的最小生成树中存在权值相同的边,则最小生成树一定不唯一。

{{ select(18) }}

4. 使用邻接表存储图时,Dijkstra 算法的朴素实现(不使用堆优化)的时间复杂度为 O(V2)O(V^2),其中 VV 为结点数。

{{ select(19) }}

5. 堆排序是⼀种稳定的排序算法

{{ select(20) }}

6. 每个大于 1 的整数都可以唯一地分解为若干个质因数的乘积(不考虑因子顺序)。####

{{ select(21) }}

7. 循环队列通过牺牲⼀个存储单元,可以区分队空和队满两种状态

{{ select(22) }}

8. 在 C++ 语言的私有继承中,基类的 public 成员在派生类中仍为 public 成员。####

{{ select(23) }}

9. 使用滚动数组优化动态规划时,通常只能降低空间复杂度,不能降低时间复杂度。####

{{ select(24) }}

10. 一个三角形的三条边的边长分别为 5、12、13,则它的面积为 30。

{{ select(25) }}