GESP_2026年06月_C++八级试卷

从PDF导入:GESP_2026年06月_C++八级试卷

C++ 180分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
从 7 本不同的算法书和 5 本不同的数学书中选出 4 本,要求两类书都至少选 1 本,共有( )种不同选法。
A. 420
B. 455
C. 465
D. 495
第2题 中级 2.0分 单选
6 个人排成一排照相,其中甲、乙两人不能相邻,共有( )种不同排法。
A. 240
B. 480
C. 600
D. 720
第3题 中级 2.0分 单选
展开式 (2x+1)^6 中,常数项的系数为( )。
A. 6
B. 12
C. 15
D. 20
第4题 中级 2.0分 单选
下面代码用于预处理组合数,横线处应填入的是( )。

#include 
using namespace std;
long long c[1005][1005];
int main() {
int n;
cin >> n;
for (int i = 0; i <= n; i++) {
c[i][0] = c[i][i] = 1;
for (int j = 1; j < i; j++) {
c[i][j] = __________________;
}
}
return 0;
}

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]
第5题 中级 2.0分 单选
下列程序输出的值为( )。

#include 
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
第6题 中级 2.0分 单选
归并排序每次把长度为n的序列分成两个规模约为n/2的子序列,递归排序后再用线性时间合并。该算法的时间复杂度通常为( )。
A. O(n)
B. O(n²)
C. O(log n)
D. O(n log n)
第7题 中级 2.0分 单选
在平面直角坐标系中,三角形三个顶点为A(1,1)、B(5,2)、C(3,6),该三角形面积为( )。
A. 9
B. 1
C. 12
D. 18
第8题 中级 2.0分 单选
某程序需要判断点P(x,y)是否在以原点为圆心、半径为5的圆内或圆上。下列判断条件正确的是( )。

// A选项
if (x * x + y * y <= 25)
cout << "Inside" << endl;
// B选项
if (abs(x) + abs(y) <= 5)
cout << "Inside" << endl;
// C选项
if (x * x - y * y <= 25)
cout << "Inside" << endl;

A. x*x + y*y <= 25
B. abs(x) + abs(y) <= 5
C. x*x - y*y <= 25
第9题 中级 2.0分 单选
某无向带权图有边(1,2,4)、(1,3,2)、(2,3,1)、(2,4,5)、(3,4,8)、(3,5,10)、(4,5,2)。该图的最小生成树总权值为(
A. 7
B. 8
C. 9
D. 10
第10题 中级 2.0分 单选
有向非负权图边为1→2(3)、2→4(4)、1→3(10)、3→4(1)、2→3(2)。使用Dijkstra算法从1号顶点出发到4号顶点的最短路径长度为( )
A. 6
B. 7
C. 8
D. 11
第11题 中级 2.0分 单选
下列代码片段的时间复杂度为( )。

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)
B. O(n log n)
C. O(n√n)
D. O(n²)
第12题 中级 2.0分 单选
某优化问题的答案是[1,M]内的整数,存在单调判定函数check(x),且每次判定的时间复杂度为O(n)。使用二分答案求最小可行值,整体时间复杂度通常为( )
A. O(nM)
B. O(n log M)
C. O(M log n)
D. O(n+M)
第13题 中级 2.0分 单选
下列线性筛的代码片段中,当枚举到质数p且i%p==0时,使用break;语句停止继续枚举。这样做的主要目的是( )。

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)
B. 保证每个合数只被它的最小质因子筛去一次
C. 保证每个素数都被标记为合数
D. 把筛法时间复杂度提高到O(n log n)
第14题 中级 2.0分 单选
在C++中,关于类的继承和构造、析构顺序,下列说法正确的是( )。
A. 派生类可以直接访问基类的private成员
B. 基类的protected成员在私有继承后会变成派生类的public成员
C. 创建派生类对象时,会先调用基类构造函数,再调用派生类构造函数
D. 销毁派生类对象时,会先调用基类析构函数,再调用派生类析构函数
第15题 中级 2.0分 单选
将4个元素按1、2、3、4的顺序入栈,在该过程中可随时插入出栈操作。下列序列中不可能作为出栈序列的是( )。
A. 1,2,3,4
B. 2,1,4,3
C. 3,2,1,4
D. 3,1,2,4
第16题 中级 2.0分 判断
若一项任务可从两种互斥的方案中选择一种完成,其中,方案A有m种做法,方案B有n种做法,则总做法数为m+n。
T. 正确
F. 错误
第17题 中级 2.0分 判断
将n个不同元素围成一圈,若只把旋转视为同一种排法、翻转仍视为不同排法,则方案数为(n-1)!。
T. 正确
F. 错误
第18题 中级 2.0分 判断
从n个不同元素中可重复地选取k个且不考虑顺序,方案数为C(n+k-1,k)。
T. 正确
F. 错误
第19题 中级 2.0分 判断
杨辉三角中的组合数满足C(n,k)=C(n-1,k)+C(n-2,k)。
T. 正确
F. 错误
第20题 中级 2.0分 判断
快速幂通过二进制拆分指数,可以在O(log b)时间内计算a^b mod m。
T. 正确
F. 错误
第21题 中级 2.0分 判断
只要图中不存在负权环,Dijkstra算法就一定能正确处理带负权边的图。
T. 正确
F. 错误
第22题 中级 2.0分 判断
若一张连通无向图所有边权两两不同,则它的最小生成树一定唯一。
T. 正确
F. 错误
第23题 中级 2.0分 判断
判断点(x,y)是否在以原点为圆心、半径为r的圆内或圆上时,可以比较x²+y²与r²,不必先开平方。
T. 正确
F. 错误
第24题 中级 2.0分 判断
若能写出判定函数check(x),表示'答案为x时是否可行',即使check(x)不满足单调性,也一定可以使用二分答案求最优解。
T. 正确
F. 错误
第25题 中级 2.0分 判断
归并排序是一种稳定排序算法,常见实现的时间复杂度为O(n log n)。
T. 正确
F. 错误
第26题 中级 25.0分 编程
. 线网建设

时间限制:1.0 s
内存限制:512.0 MB
Λ市有n座基站需要通过线网互相连接。第i座基站位于二维平面上坐标(xi,yi)处。
第i座基站与第j座基站之间的距离定义为d(i,j)=√((xi-xj)²+(yi-yj)²)。
如果两座基站之间的距离不超过给定的整数l,那么可以修建连接这两座基站的线路,线路长度为基站间的距离。如果从一座基站出发,经过一系列线网中的线路可以到达另一座基站,则称这两座基站是互相连接的。
请问使得n座基站两两之间都互相连接,需要修建的线路总长度最小是多少?如果不能修建满足条件的线网,则输出Impossible。
对于40%的测试点,保证1≤n≤100。
对于所有测试点,保证1≤n≤500,1≤l≤100,-100≤xi,yi≤100。

【输入格式】
第一行,两个正整数n,l,分别表示基站数量与线路长度上限。
接下来n行,每行两个整数xi,yi,表示基站的坐标。
【输出格式】
输出一行。如果能修建满足条件的线网,则输出需要修建的最小线路总长度,保留两位小数。否则输出Impossible。
【样例】
4 2
1 0
-1 -1
0 0
1 1

4 1
1 0
-1 -1
0 0
1 1
【样例解释】
3.41

Impossible
第27题 中级 25.0分 编程
. 堆石子

时间限制:1.0 s
内存限制:512.0 MB
有m堆石子,编号为1,2,…,m,其石子数量分别记为a1,a2,…,am。
现在要求第1堆石子恰有n个(即a1=n),并且此后每堆石子的数量严格小于前一堆,即ai < ai-1(2≤i≤m)。此外,每堆至少需要有一个石子,即ai ≥ 1。
在总石子数量不设限制的情况下,给定m ≥ 2, n ≥ 1,有多少个满足要求的石子堆放方案?
两个方案不同,当且仅当,两个方案中至少有一堆石子数量不同。
如果不存在满足要求的方案,输出0。由于方案数可能很大,请输出方案数对10^9+7取模后的结果。
对于数据点1,2:2≤m≤100, 1≤n≤100
对于数据点3,4,5:2≤m≤100, 1≤n≤10^8
对于数据点6,7,8,9,10:2≤m≤10^5, 1≤n≤10^8

【输入格式】
输入一行两个正整数m和n。
【输出格式】
输出一个整数,表示总方案数对10^9+7取模后的结果。
【样例】
3 5
【样例解释】
6
💬