2026年6月GESP真题及题解(C++八级): 选择题和判断题(题解)

选择题
第1题
题目: 从7本不同的算法书和5本不同的数学书中选出4本,要求两类书都至少选1本,共有( )种不同选法。
A. 420
B. 455
C. 465
D. 495
答案: B
解析:
总的选法数为
( 12 4 ) = 495 \binom{12}{4}=495 (412)=495
只选算法书的选法为
( 7 4 ) = 35 \binom{7}{4}=35 (47)=35
只选数学书的选法为
( 5 4 ) = 5 \binom{5}{4}=5 (45)=5
所以两类书都至少选1本的选法为
495 − 35 − 5 = 455 495-35-5=455 495−35−5=455
第2题
题目: 6个人排成一排照相,其中甲、乙两人不能相邻,共有( )种不同排法。
A. 240
B. 480
C. 600
D. 720
答案: B
解析:
6个人全排列有
6 ! = 720 6!=720 6!=720
种。
甲、乙相邻时,把甲、乙看成一个整体,有 2 ! 2! 2! 种内部排法,整体与其余4人共5个对象排列,有 5 ! 5! 5! 种,因此相邻排法为
2 ! × 5 ! = 2 × 120 = 240 2!\times 5!=2\times120=240 2!×5!=2×120=240
所以不相邻排法为
720 − 240 = 480 720-240=480 720−240=480
第3题
题目: 展开式 ( x 2 − 1 x ) 6 \left(x^2-\frac{1}{x}\right)^6 (x2−x1)6 中,常数项的系数为( )。
A. 6
B. 12
C. 15
D. 20
答案: C
解析:
二项展开通项为
T k + 1 = ( 6 k ) ( x 2 ) 6 − k ( − 1 x ) k = ( 6 k ) ( − 1 ) k x 12 − 3 k T_{k+1}=\binom{6}{k}(x^2)^{6-k}\left(-\frac{1}{x}\right)^k =\binom{6}{k}(-1)^k x^{12-3k} Tk+1=(k6)(x2)6−k(−x1)k=(k6)(−1)kx12−3k
要求常数项,则
12 − 3 k = 0 ⇒ k = 4 12-3k=0 \Rightarrow k=4 12−3k=0⇒k=4
所以常数项系数为
( 6 4 ) ( − 1 ) 4 = 15 \binom{6}{4}(-1)^4=15 (46)(−1)4=15
第4题
题目: 下面代码用于预处理组合数,横线处应填入的是( )。
cpp
for (int i = 0; i <= n; i++) {
c[i][0] = c[i][i] = 1;
for (int j = 1; j < i; j++)
c[i][j] = ________;
}
A. c[i-1][j-1] + c[i-1][j]
B. c[i][j-1] + c[i-1][j-1]
C. c[i-1][j] + c[i][j+1]
D. c[i][j-1] * c[i-1][j]
答案: A
解析:
组合数满足帕斯卡公式:
( i j ) = ( i − 1 j − 1 ) + ( i − 1 j ) \binom{i}{j}=\binom{i-1}{j-1}+\binom{i-1}{j} (ji)=(j−1i−1)+(ji−1)
即
cpp
c[i][j] = c[i-1][j-1] + c[i-1][j];
第5题
题目: 下列程序输出的值为( )。
cpp
#include <iostream>
using namespace std;
long long qpow(long long a, long long b, long long mod) {
long long ans = 1 % mod;
while (b) {
if (b & 1)
ans = ans * a % mod;
a = a * a % mod;
b >>= 1;
}
return ans;
}
int main() {
cout << qpow(3, 20, 17) << endl;
return 0;
}
A. 1
B. 4
C. 13
D. 16
答案: C
解析:
计算 3 20 m o d 17 3^{20}\bmod 17 320mod17。
3 4 = 81 ≡ 13 ( m o d 17 ) 3^4=81\equiv 13\pmod{17} 34=81≡13(mod17)
3 8 ≡ 13 2 = 169 ≡ 16 ≡ − 1 ( m o d 17 ) 3^8\equiv 13^2=169\equiv 16\equiv -1\pmod{17} 38≡132=169≡16≡−1(mod17)
3 16 ≡ ( − 1 ) 2 = 1 ( m o d 17 ) 3^{16}\equiv (-1)^2=1\pmod{17} 316≡(−1)2=1(mod17)
所以
3 20 = 3 16 ⋅ 3 4 ≡ 1 ⋅ 13 = 13 ( m o d 17 ) 3^{20}=3^{16}\cdot 3^4\equiv 1\cdot 13=13\pmod{17} 320=316⋅34≡1⋅13=13(mod17)
输出为 13 13 13。
第6题
题目: 归并排序每次把长度为 n n n 的序列分成两个规模约为 n / 2 n/2 n/2 的子序列,递归排序后再用线性时间合并。该算法的时间复杂度通常为( )。
A. O ( n ) O(n) O(n)
B. O ( n 2 ) O(n^2) O(n2)
C. O ( log n ) O(\log n) O(logn)
D. O ( n log n ) O(n\log n) O(nlogn)
答案: D
解析:
归并排序的递归式为
T ( n ) = 2 T ( n 2 ) + O ( n ) T(n)=2T\left(\frac{n}{2}\right)+O(n) T(n)=2T(2n)+O(n)
由主定理可得
T ( n ) = O ( n log n ) T(n)=O(n\log n) T(n)=O(nlogn)
第7题
题目: 在平面直角坐标系中,三角形三个顶点为 A ( 1 , 1 ) A(1,1) A(1,1)、 B ( 5 , 2 ) B(5,2) B(5,2)、 C ( 3 , 6 ) C(3,6) C(3,6),该三角形面积为( )。
A. 9
B. 10
C. 12
D. 18
答案: A
解析:
利用向量叉积求面积:
A B → = ( 4 , 1 ) , A C → = ( 2 , 5 ) \overrightarrow{AB}=(4,1),\quad \overrightarrow{AC}=(2,5) AB =(4,1),AC =(2,5)
叉积绝对值为
∣ 4 × 5 − 1 × 2 ∣ = ∣ 20 − 2 ∣ = 18 |4\times 5-1\times 2|=|20-2|=18 ∣4×5−1×2∣=∣20−2∣=18
三角形面积为
1 2 × 18 = 9 \frac{1}{2}\times 18=9 21×18=9
第8题
题目: 某程序需要判断点 P ( x , y ) P(x,y) P(x,y) 是否在以原点为圆心、半径为5的圆内或圆上。下列判断条件正确的是( )。
A. x ∗ x + y ∗ y < = 25 x*x+y*y<=25 x∗x+y∗y<=25
B. a b s ( x ) + a b s ( y ) < = 5 \mathrm{abs}(x)+\mathrm{abs}(y)<=5 abs(x)+abs(y)<=5
C. x ∗ x − y ∗ y < = 25 x*x-y*y<=25 x∗x−y∗y<=25
D. x + y < = 5 x+y<=5 x+y<=5
答案: A
解析:
点到原点距离为
x 2 + y 2 \sqrt{x^2+y^2} x2+y2
在圆内或圆上等价于
x 2 + y 2 ≤ 5 \sqrt{x^2+y^2}\le 5 x2+y2 ≤5
两边平方得
x 2 + y 2 ≤ 25 x^2+y^2\le 25 x2+y2≤25
即 x*x + y*y <= 25。
第9题
题目: 某无向带权图有边 ( 1 , 2 , 4 ) (1,2,4) (1,2,4)、 ( 1 , 3 , 2 ) (1,3,2) (1,3,2)、 ( 2 , 3 , 1 ) (2,3,1) (2,3,1)、 ( 2 , 4 , 5 ) (2,4,5) (2,4,5)、 ( 3 , 4 , 8 ) (3,4,8) (3,4,8)、 ( 3 , 5 , 10 ) (3,5,10) (3,5,10)、 ( 4 , 5 , 2 ) (4,5,2) (4,5,2)。该图最小生成树的总权值为( )。
A. 7
B. 8
C. 9
D. 10
答案: D
解析:
按边权从小到大排序:
( 2 , 3 , 1 ) , ( 1 , 3 , 2 ) , ( 4 , 5 , 2 ) , ( 1 , 2 , 4 ) , ( 2 , 4 , 5 ) , ( 3 , 4 , 8 ) , ( 3 , 5 , 10 ) (2,3,1),\ (1,3,2),\ (4,5,2),\ (1,2,4),\ (2,4,5),\ (3,4,8),\ (3,5,10) (2,3,1), (1,3,2), (4,5,2), (1,2,4), (2,4,5), (3,4,8), (3,5,10)
使用 Kruskal 算法:
- 选 ( 2 , 3 ) (2,3) (2,3),权值 1 1 1;
- 选 ( 1 , 3 ) (1,3) (1,3),权值 2 2 2;
- 选 ( 4 , 5 ) (4,5) (4,5),权值 2 2 2;
- ( 1 , 2 ) (1,2) (1,2) 会成环,不选;
- 选 ( 2 , 4 ) (2,4) (2,4),权值 5 5 5。
总权值:
1 + 2 + 2 + 5 = 10 1+2+2+5=10 1+2+2+5=10
第10题
题目: 有向非负权图边为 1 → 2 ( 3 ) 1\rightarrow2(3) 1→2(3)、 2 → 4 ( 4 ) 2\rightarrow4(4) 2→4(4)、 1 → 3 ( 10 ) 1\rightarrow3(10) 1→3(10)、 3 → 4 ( 1 ) 3\rightarrow4(1) 3→4(1)、 2 → 3 ( 2 ) 2\rightarrow3(2) 2→3(2)。使用 Dijkstra 算法从1号顶点出发到4号顶点的最短距离为( )。
A. 6
B. 7
C. 8
D. 11
答案: A
解析:
可能路径:
- 1 → 2 → 4 1\rightarrow2\rightarrow4 1→2→4: 3 + 4 = 7 3+4=7 3+4=7
- 1 → 3 → 4 1\rightarrow3\rightarrow4 1→3→4: 10 + 1 = 11 10+1=11 10+1=11
- 1 → 2 → 3 → 4 1\rightarrow2\rightarrow3\rightarrow4 1→2→3→4: 3 + 2 + 1 = 6 3+2+1=6 3+2+1=6
最短距离为 6 6 6。
第11题
题目: 下列代码片段的时间复杂度为( )。
cpp
long long s = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j * j <= n; j++) {
s += i + j;
}
}
A. O ( n ) O(n) O(n)
B. O ( n log n ) O(n\log n) O(nlogn)
C. O ( n n ) O(n\sqrt{n}) O(nn )
D. O ( n 2 ) O(n^2) O(n2)
答案: C
解析:
外层循环执行 n n n 次。
内层条件为 j 2 ≤ n j^2\le n j2≤n,所以 j ≤ n j\le \sqrt{n} j≤n ,内层执行约 n \sqrt{n} n 次。
总时间复杂度为
O ( n n ) O(n\sqrt{n}) O(nn )
第12题
题目: 某优化问题的答案是 1 , M 1,M 1,M 内的整数,存在单调判定函数 check(x),且每次判定的时间复杂度为 O ( n ) O(n) O(n)。使用二分答案求最小可行值,整体时间复杂度通常为( )。
A. O ( n M ) O(nM) O(nM)
B. O ( n log M ) O(n\log M) O(nlogM)
C. O ( M log n ) O(M\log n) O(Mlogn)
D. O ( n + M ) O(n+M) O(n+M)
答案: B
解析:
二分答案需要进行 O ( log M ) O(\log M) O(logM) 次判定。
每次判定复杂度为 O ( n ) O(n) O(n)。
总时间复杂度为
O ( n log M ) O(n\log M) O(nlogM)
第13题
题目: 下列线性筛的代码片段中,当枚举到质数 p p p 且 i % p = = 0 i\%p==0 i%p==0 时,使用 break; 语句停止继续枚举。这样做的主要目的是( )。
cpp
for (int i = 2; i <= n; ++i) {
if (!is_composite[i])
primes.push_back(i);
for (int p : primes) {
if (i * p > n)
break;
is_composite[i * p] = true;
if (i % p == 0)
break; // 这条语句的目的是?
}
}
A. 保证递归深度不超过 O ( log n ) O(\log n) O(logn)。
B. 保证每个合数只被它的最小质因子筛去一次。
C. 保证每个素数都被标记为合数。
D. 把筛法时间复杂度提高到 O ( n log n ) O(n\log n) O(nlogn)。
答案: B
解析:
线性筛中,当 i % p = = 0 i\%p==0 i%p==0 时,说明 p p p 是 i i i 的最小质因子。此时若继续用更大的质数筛,会导致同一个合数被多个质因子重复筛去。
因此 break 的目的是保证每个合数只被它的最小质因子筛去一次,从而保证线性时间复杂度。
第14题
题目: 在 C++ 中,关于类的继承和构造、析构顺序,下列说法正确的是( )。
A. 派生类可以直接访问基类的 private 成员。
B. 基类的 protected 成员在私有继承后会变成派生类的 public 成员。
C. 创建派生类对象时,会先调用基类构造函数,再调用派生类构造函数。
D. 销毁派生类对象时,会先调用基类析构函数,再调用派生类析构函数。
答案: C
解析:
创建派生类对象时,构造顺序为:
- 先调用基类构造函数;
- 再调用派生类构造函数。
销毁时顺序相反:
- 先调用派生类析构函数;
- 再调用基类析构函数。
所以 C 正确。
A 错误,private 成员不能被派生类直接访问。
B 错误,私有继承后基类 protected 成员在派生类中变为 private。
D 错误,析构顺序反了。
第15题
题目: 将4个元素按 1 , 2 , 3 , 4 1,2,3,4 1,2,3,4 的顺序入栈,在该过程中可随时插入出栈操作。下列序列中不可能作为出栈序列的是( )。
A. 1 , 2 , 3 , 4 1,2,3,4 1,2,3,4
B. 2 , 1 , 4 , 3 2,1,4,3 2,1,4,3
C. 3 , 2 , 1 , 4 3,2,1,4 3,2,1,4
D. 3 , 1 , 2 , 4 3,1,2,4 3,1,2,4
答案: D
解析:
A 可行:入1出1,入2出2,入3出3,入4出4。
B 可行:入1入2出2出1,入3入4出4出3。
C 可行:入1入2入3出3出2出1,入4出4。
D 不可行:若第一个出栈的是3,则栈内从底到顶为1、2,栈顶为3。出3后,栈顶为2,必须先出2,才能出1。因此不可能出现 3 , 1 , 2 , 4 3,1,2,4 3,1,2,4。
判断题
第1题
题目: 若一项任务可从两种互斥的方案中选择一种完成,其中方案A有 m m m 种做法,方案B有 n n n 种做法,则总做法数为 m + n m+n m+n。
答案: √
解析:
两种方案互斥,即选择方案A就不能选择方案B,选择方案B就不能选择方案A。根据加法原理,总做法数为
m + n m+n m+n
第2题
题目: 将 n n n 个不同元素围成一圈,若只把旋转视为同一种排法、翻转仍视为不同排法,则方案数为 ( n − 1 ) ! (n-1)! (n−1)!。
答案: √
解析:
这是圆排列问题。
若只把旋转视为同一种,则圆排列数为
n ! n = ( n − 1 ) ! \frac{n!}{n}=(n-1)! nn!=(n−1)!
翻转仍视为不同,因此不需要再除以2。正确。
第3题
题目: 从 n n n 个不同元素中可重复地选取 k k k 个且不考虑顺序,方案数为 C ( n + k , k ) C(n+k,k) C(n+k,k)。
答案: ×
解析:
从 n n n 个不同元素中可重复地选取 k k k 个且不考虑顺序,属于可重复组合,方案数应为
( n + k − 1 k ) \binom{n+k-1}{k} (kn+k−1)
题目中写成 ( n + k k ) \binom{n+k}{k} (kn+k),多加了1,因此错误。
第4题
题目: 杨辉三角中的组合数满足 C ( n , k ) = C ( n − 1 , k ) + C ( n − 2 , k ) C(n,k)=C(n-1,k)+C(n-2,k) C(n,k)=C(n−1,k)+C(n−2,k)。
答案: ×
解析:
杨辉三角中的组合数满足帕斯卡公式:
( n k ) = ( n − 1 k − 1 ) + ( n − 1 k ) \binom{n}{k}=\binom{n-1}{k-1}+\binom{n-1}{k} (kn)=(k−1n−1)+(kn−1)
题目中写成了
( n − 1 k ) + ( n − 2 k ) \binom{n-1}{k}+\binom{n-2}{k} (kn−1)+(kn−2)
因此错误。
第5题
题目: 快速幂通过二进制拆分指数,可以在 O ( log b ) O(\log b) O(logb) 时间内计算 a b m o d m a^b\bmod m abmodm。
答案: √
解析:
快速幂每次将指数 b b b 右移一位,最多处理 O ( log b ) O(\log b) O(logb) 位。
每轮进行一次乘法取模,因此时间复杂度为
O ( log b ) O(\log b) O(logb)
第6题
题目: 只要图中不存在负权环,Dijkstra算法就一定能正确处理带负权边的图。
答案: ×
解析:
Dijkstra 算法要求所有边权非负。
如果存在负权边,即使没有负权环,也可能导致已经确定最短路的顶点之后被更短路径更新,从而得到错误结果。
因此该说法错误。
第7题
题目: 若一张连通无向图所有边权两两不同,则它的最小生成树一定唯一。
答案: √
解析:
若所有边权两两不同,则任意环上的最大边唯一。
根据最小生成树的性质,最大边一定不在最小生成树中,因此选择过程唯一,最小生成树唯一。
第8题
题目: 判断点 ( x , y ) (x,y) (x,y) 是否在以原点为圆心、半径为 r r r 的圆内或圆上时,可以比较 x 2 + y 2 x^2+y^2 x2+y2 与 r 2 r^2 r2,不必先开平方。
答案: √
解析:
点在圆内或圆上等价于
x 2 + y 2 ≤ r \sqrt{x^2+y^2}\le r x2+y2 ≤r
由于两边均非负,可以平方,得到
x 2 + y 2 ≤ r 2 x^2+y^2\le r^2 x2+y2≤r2
因此不需要开平方。
第9题
题目: 若能写出判定函数 check(x),表示"答案为 x x x 时是否可行",即使 check(x) 不满足单调性,也一定可以使用二分答案求最优解。
答案: ×
解析:
二分答案要求判定函数具有单调性。
例如若 x x x 可行,则所有大于 x x x 的值也可行,或所有小于 x x x 的值也可行。
如果 check(x) 不满足单调性,二分答案无法保证正确缩小范围,因此不能一定使用二分答案。
第10题
题目: 归并排序是一种稳定排序算法,常见实现的时间复杂度为 O ( n log n ) O(n\log n) O(nlogn)。
答案: √
解析:
归并排序在合并两个有序序列时,若相等元素优先取前一个序列中的元素,则可以保持稳定性。
其时间复杂度递推为
T ( n ) = 2 T ( n 2 ) + O ( n ) = O ( n log n ) T(n)=2T\left(\frac{n}{2}\right)+O(n)=O(n\log n) T(n)=2T(2n)+O(n)=O(nlogn)
因此正确。
【秘籍汇总】(完整csp信奥赛C++学习资料):
1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):
https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:
https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:
CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转
CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转
信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转
4、csp信奥赛冲刺一等奖有效刷题题解:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转
信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转
5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转
· 文末祝福 ·
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"跟着王老师一起学习信奥赛C++";
cout<<" 成就更好的自己! ";
cout<<" csp信奥赛一等奖属于你! ";
return 0;
}
