选择题 共15道

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15


判断题 共10道

16 17 18 19 20 21 22 23 24 25


编程题 共2道

26 27

E1038 202612 CCF-GESP C++八级真题-练习

选择题 共15道
01 某平台生成“取件码”由6个字符组成:前4位为数字( 0 – 9 ),后2位为大写字母( A – Z ),其中字母不能为 I 、 O 。假设数字和字母均可重复使用,要求整个取件码中恰好有2个数字为奇数。共有多少种不同取件码? 2分
登录后查看选项
02

下列代码实现了归并排序(Merge Sort)的分治部分。为了正确地将数组 a 的 [left, right] 区间进行排序,横线处应该填入的是( )。

void merge_sort(int a[], int left, int right) {
	if (left >= right) return;
	int mid = (left + right) / 2;
	merge_sort(a, left, mid);
	________; // 在此处填入选项
	merge(a, left, mid, right); // 合并操作
}
2分
登录后查看选项
03 某社团有男生8人、女生7人。现需选出1名队长(性别不限)、1名副队长(性别不限)、2名宣传委员(两人无角色区别,且必须至少1名女生)。假如一人不能兼任多职,共有多少种不同选法? 2分
登录后查看选项
04 二项式 (2x-y)8 的展开式中 x5y3 项的系数为( )。 2分
登录后查看选项
05

下面是使用邻接矩阵实现的Dijkstra算法的核心片段,用于求单源最短路径。在找到当前距离起点最近的顶点u 后,需要更新其邻接点 j 的距离。横线处应填入的代码是( )。

for (int j = 1; j <= n; j++) {
	if (!visited[j] && graph[u][j] < INF) {
		if (________) { // 在此处填入选项
			dis[j] = dis[u] + graph[u][j];
		}
	}
}
2分
登录后查看选项
06

下面程序使用动态规划求两个字符串的最长公共子序列(LCS)长度,横线处应填入的是( )。

#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int lcs_len(const string &a, const string &b) {
	int n = (int)a.size(), m = (int)b.size();
	vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++)
			if (a[i - 1] == b[j - 1])
				dp[i][j] = dp[i - 1][j - 1] + 1;
			else
				________; // 在此处填入选项
	return dp[n][m];
}
2分
登录后查看选项
07 已知两个点A(x1,y1)和B(x2,y2)在平面直角坐标系中的坐标。下列C++表达式中,能正确计算这两点之间直线距离的是( )。 2分
登录后查看选项
08 已知 int a = 10; ,执行 int &b = a; b = 20; 后,变量 a 的值是( )。 2分
登录后查看选项
09

下列代码的时间复杂度(以n为自变量,忽略常数与低阶项)是( )。

long long s = 0;
for (int i = 1; i <= n; i++) {
	for (int j = 1; j * j <= i; j++) {
		s += j;
	}
}
2分
登录后查看选项
10

下列程序实现了线性筛法(欧拉筛),用于在O(n)时间内求出1~n之间的所有质数。为了保证每个合数只被其最小质因子筛掉,横线处应填入的语句是( )。

for (int i = 2; i <= n; i++) {
	if (!not_prime[i]) primes[++cnt] = i;
	for (int j = 1; j <= cnt && i * primes[j] <= n; j++) {
		not_prime[i * primes[j]] = true;
		if (________) break; // 在此处填入选项
	}
}
2分
登录后查看选项
11 在C++语言中,关于类的继承和访问权限,下列说法正确的是( )。 2分
登录后查看选项
12

当输入 6 时,下列程序的输出结果为( )。

#include <iostream>
using namespace std;
int f(int n) {
	if (n <= 3) return n;
	return f(n - 1) + f(n - 2) + 2 * f(n - 3);
}
int main() {
	int n;
	cin >> n;
	cout << f(n) << endl;
	return 0;
}
2分
登录后查看选项
13 从1到999这999个正整数中,十进制表示中数字 5 恰好出现一次的数有多少个? 2分
登录后查看选项
14

当输入 2023 时,下列程序的输出结果为( )。

#include <iostream>
using namespace std;
int main() {
	int x, ans = 0;
	cin >> x;
	while (x != 0) {
		x -= x & -x;
		ans++;
	}
	cout << ans << endl;
	return 0;
}
2分
登录后查看选项
15 对连通无向图执行Kruskal算法。已按边权从小到大依次扫描到某条边 e=(u,v)。此时在已经构建的部分MST结构中,(u,v)已在同一连通块内。关于边e的处理,下列说法正确的是( )。 2分
登录后查看选项
判断题 共10道
16 若一项任务可用两种互斥方案完成:方案A有m种做法,方案B有n种做法,则总做法数为m+n。 2分
登录后查看选项
17 在C++语言中,引用一旦被初始化,就不能再改为引用另一个变量。 2分
登录后查看选项
18 快速排序和归并排序的平均时间复杂度都是O(n log n),但快速排序是不稳定的排序算法,归并排序是稳定的排序算法。 2分
登录后查看选项
19 使用 math.h 或 cmath 头文件中的函数,表达式 sqrt(4) 的结果类型为 double 。 2分
登录后查看选项
20 在杨辉三角形中,第n行(从0开始计数,即第n行有n+1个数)的所有数字之和等于2n 2分
登录后查看选项
21 使用二叉堆优化的Dijkstra最短路算法,在某些特殊情况下时间复杂度不如朴素实现的O(V2)。 2分
登录后查看选项
22 n个不同元素依次入栈的出栈序列数与将n个不同元素划分成若干非空子集的方案数相等。 2分
登录后查看选项
23 快速排序在最坏情况下的时间复杂度为O(n log n),可以通过随机化选择基准值(pivot)的方法完全避免退化。 2分
登录后查看选项
24 在C++语言中,一个类可以拥有多个构造函数,也可以拥有多个析构函数。 2分
登录后查看选项
25 求两个序列的最长公共子序列(LCS)时,使用滚动数组优化空间后,仍然可以还原出具体的LCS序列。 2分
登录后查看选项
编程题 共2道
26

25分
登录后作答
27

25分
登录后作答