GESP 2025年6月_C++八级试卷

从PDF导入:GESP 2025年6月_C++八级试卷

C++ 180分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
一间机房要安排6名同学进行上机考试,座位共2行3列。考虑到在座位上很容易看到同一行的左右两侧的屏幕,安排中间一列的同学做A卷,左右两列的同学做B卷。请问共有多少种排座位的方案?( )。
A. 720
B. 90
C. 48
D. 15
第2题 中级 2.0分 单选
又到了毕业季,学长学姐们都在开心地拍毕业照。现在有3位学长、3位学姐希望排成一排拍照,要求男生不相邻、女生不相邻。请问共有多少种拍照方案?( )
A. 720
B. 72
C. 36
D. 2
第3题 中级 2.0分 单选
下列关于C++类和对象的说法,错误的是( )。
A. 通过语句const int x=5;定义了一个对象x。
B. 通过语句std::string t="12345";定义了一个对象t。
C. 通过语句void (*fp)()=NULL;定义了一个对象fp。
D. 通过语句class MyClass;定义了一个类MyClass。
第4题 中级 2.0分 单选
关于生成树的说法,错误的是( )。
A. 一个无向连通图,一定有生成树。
B. n个顶点的无向图,其生成树要么不存在,要么一定包含n-1条边。
C. n个顶点、n-1条边的无向图,不可能有多棵生成树。
D. n个顶点、n-1条边的无向图,它本身就是自己的生成树。
第5题 中级 2.0分 单选
一对夫妻生男生女的概率相同。这对夫妻希望儿女双全。请问这对夫妻生下两个孩子时,实现儿女双全的概率是多少?( )
A. 2/3
B. 1/3
C. 1/2
D. 1/4
第6题 中级 2.0分 单选
已定义变量double a,b;,下列哪个表达式可以用来判断一元二次方程x²+ax+b=0是否有实根?( )
A. 4*b-a*a<0
B. 4*b<=a*a
C. a*a-4*b>=0
D. b*4-a*a>=0
第7题 中级 2.0分 单选
n个结点的二叉树,执行广度优先搜索的平均时间复杂度是( )。
A. O(logn)
B. O(nlogn)
C. O(n)
D. O(2ⁿ)
第8题 中级 2.0分 单选
以下关于动态规划的说法中,错误的是( )。
A. 动态规划方法通常能够列出递推公式。
B. 动态规划方法的时间复杂度通常为状态的个数。
C. 动态规划方法有递推和递归两种实现形式。
D. 对很多问题,递推实现和递归实现动态规划方法的时间复杂度相当。
第9题 中级 2.0分 单选
下面的sum_digit函数试图求出从1到n的数中,包含数字d的个数。该函数的时间复杂度为( )。

#include
int count_digit(int n, char d) {
int cnt = 0;
std::string s = std::to_string(n);
for (int i = 0; i < s.length(); i++)
if (s[i] == d)
cnt++;
return cnt;
}
int sum_digit(int n, char d) {
int sum = 0;
for (int i = 1; i <= n; i++)
sum += count_digit(i, d);
return sum;
}

A. O(nlogn)
B. O(n)
C. O(logn)
D. O(n²)
第10题 中级 2.0分 单选
下面程序的输出为( )。

#include
const int N = 10;
int ch[N][N][N];
int main() {
for (int x = 0; x < N; x++)
for (int y = 0; y < N; y++)
for (int z = 0; z < N; z++)
if (x == 0 && y == 0 && z == 0)
ch[x][y][z] = 1;
else {
if (x > 0)
ch[x][y][z] += ch[x - 1][y][z];
if (y > 0)
ch[x][y][z] += ch[x][y - 1][z];
if (z > 0)
ch[x][y][z] += ch[x][y][z - 1];
}
std::cout << ch[1][2][3] << std::endl;
return 0;
}

A. 60
B. 20
C. 15
D. 10
第11题 中级 2.0分 单选
下面count_triple函数的时间复杂度为( )。

int gcd(int a, int b) {
if (a == 0)
return b;
return gcd(b % a, a);
}
int count_triple(int n) {
int cnt = 0;
for (int v = 1; v * v * 4 <= n; v++)
for (int u = v + 1; u * (u + v) * 2 <= n; u += 2)
if (gcd(u, v) == 1) {
int a = u * u - v * v;
int b = u * v * 2;
int c = u * u + v * v;
cnt += n / (a + b + c);
}
return cnt;
}

A. O(n)
B. O(n²)
C. O(nlogn)
D. O(n²logn)
第12题 中级 2.0分 单选
下面quick_sort函数试图实现快速排序算法,两处横线处分别应该填入的是( )。

void swap(int & a, int & b) {
int temp = a; a = b; b = temp;
}
int partition(int a[], int l, int r) {
int pivot = a[l], i = l + 1, j = r;
while (i <= j) {
while (i <= j && a[j] >= pivot) j--;
while (i <= j && a[i] <= pivot) i++;
if (i < j)
swap(a[i], a[j]);
}
______ // 在此处填入选项
return ______; // 在此处填入选项
}
void quick_sort(int a[], int l, int r) {
if (l < r) {
int pivot = partition(a, l, r);
quick_sort(a, l, pivot - 1);
quick_sort(a, pivot + 1, r);
}
}

A. swap(a[l], a[i]) ; i
B. swap(a[l], a[j]) ; i
C. swap(a[l], a[i]) ; j
D. swap(a[l], a[j]) ; j
第13题 中级 2.0分 单选
下面LIS函数试图求出最长上升子序列的长度,横线处应该填入的是( )。

int max(int a, int b) {
return (a > b) ? a : b;
}
int LIS(vector & nums) {
int n = nums.size();
if (n == 0)
return 0;
vector dp(n, 1);
int maxLen = 1;
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++)
if (nums[j] < nums[i])
________; // 在此处填入选项
maxLen = max(maxLen, dp[i]);
}
return maxLen;
}

A. dp[i] = max(dp[i], dp[j]) ;
B. dp[i] = dp[j] + 1 ;
C. dp[i] = max(dp[i], dp[j] + 1) ;
D. dp[i] = max(dp[i], dp[j]) + 1 ;
第14题 中级 2.0分 单选
下面LIS函数试图求出最长上升子序列的长度,其时间复杂度为( )。

A. O(logn)
B. O(n)
C. O(nlogn)
D. O(n²)
第15题 中级 2.0分 单选
下面的程序使用邻接矩阵表达的带权无向图,则从顶点0到顶点3的最短距离为( )。

int weight[4][4] = {
{ 0, 5, 8, 10},
{ 5, 0, 1, 7},
{ 8, 1, 0, 3},
{10, 7, 3, 0}
};

A. 9
B. 10
C. 11
D. 12
第16题 中级 2.0分 判断
C++语言中,表达式9|12的结果类型为int、值为13。
T. 正确
F. 错误
第17题 中级 2.0分 判断
C++语言中,访问数据发生下标越界时,总是会产生运行时错误,从而使程序异常退出。
T. 正确
F. 错误
第18题 中级 2.0分 判断
对n个元素的数组进行归并排序,最差情况的时间复杂度为O(nlogn)。
T. 正确
F. 错误
第19题 中级 2.0分 判断
5个相同的红球和4个相同的蓝球排成一排,要求每个蓝球的两侧都必须至少有一个红球,则一共有15种排列方案。
T. 正确
F. 错误
第20题 中级 2.0分 判断
使用math.h或cmath头文件中的函数,表达式log(8)的结果类型为double、值约为3。
T. 正确
F. 错误
第21题 中级 2.0分 判断
C++是一种面向对象编程语言,C则不是。继承是面向对象三大特性之一,因此,使用C语言无法实现继承。
T. 正确
F. 错误
第22题 中级 2.0分 判断
n个顶点的无向完全图,有n-2棵生成树。
T. 正确
F. 错误
第23题 中级 2.0分 判断
已知三个double类型的变量a、b和theta分别表示一个三角形的两条边长及二者的夹角(弧度),则三角形的周长可以通过表达式sqrt(a*a+b*b-2*a*
T. 正确
F. 错误
第24题 中级 2.0分 判断
有V个顶点、E条边的图的深度优先搜索遍历时间复杂度为O(V+E)。
T. 正确
F. 错误
第25题 中级 2.0分 判断
从32名学生中选出4人分别担任班长、副班长、学习委员和组织委员,老师要求班级综合成绩排名最后的4名学生不得参选班长或学习委员(仍可以参选副班长和组织委员),则共有P(30,4) 种不同的选法。
T. 正确
F. 错误
第26题 中级 25.0分 编程
树上旅行

时间限制:1.0s 内存限制:512.0MB
给定一棵有n个结点的有根树,结点依次以1,2,...,n编号,其中根结点的编号为1。
小A计划在这棵有根树上进行q次旅行。在第i次旅行中,小A首先会选定结点si作为起点,并移动若干次。
移动分为两种:1.移动至当前结点的父结点;2.移动至当前结点的所有子结点中编号最小的结点。
对于第i次旅行,旅行中的移动将以ki个不为零的整数构成的序列表示。根据给出的序列从左至右完成所有移动后,小A所在的结点即是旅行的终点。

【输入格式】
第一行,两个正整数n、q。第二行,n-1个整数P₂,P₃,...,Pₙ。接下来2q行描述q次旅行。
【输出格式】
输出共q行,第i行包含一个整数,表示第i次旅行终点的结点编号。
【样例输入】
5 4
1 1 2 2
3 3
1 -1 -1
2 5
1 -1 1 -1 1
5 8
1 1 1 -1 -1 -1 -1 -1
5 3
-1 -1 1
【样例输出】
1
2
3
4
对于所有测试点,保证1≤n≤10⁵,1≤q≤2×10⁴,∑ki≤10⁵。
第27题 中级 25.0分 编程
遍历计数

时间限制:1.0s 内存限制:512.0MB
给定一棵有n个结点的树T,结点依次以1,2,...,n标号。
树T的深度优先遍历序可由以下过程得到:选定起点,按任意顺序遍历相邻结点,回溯时记录结点编号。
请你求出树T有多少组不同的深度优先遍历序。由于答案可能很大,你只需要求出答案对10⁹取模之后的结果。

【输入格式】
第一行,一个整数n。接下来n-1行,每行两个正整数表示边。
【输出格式】
输出一行,一个整数,表示树T的不同的深度优先遍历序数量对10⁹取模的结果。
【样例输入1】
3
1 2
1 3
【样例输出1】
6
对于所有测试点,保证1≤n≤10⁵。
💬