2024年6月CCF—GESP(C++七级)编程能力等级认证试卷
剩余时间 --:--:--
单选题 共 15 题
1.

已知两个序列s1= {1,3,4,5,6,7,7,8,1} 、s2= {3,5,7,4,8,2,9,5,1} ,则它们的最长公共子序列是()。

2.

对于如下二叉树,下面访问顺序说法错误的是( )。

3.

对于如下图的二叉树,说法正确的是( )。

4.

下面关于图的说法正确的是( )。

5.

以下哪个方案不能合理解决或缓解哈希表冲突( )。

6.

下面 count_triple 函数的时间复杂度为( )。

int count_triple(int n) {
	int cnt = 0;
	for (int a = 1; a <= n; a++)
		for (int b = a; a + b <= n; b++) {
			int c = sqrt(a * a + b * b);
			if (a + b + c > n)
				break;
			if (a * a + b * b == c * c)
				cnt++;
		}
	return cnt;
}
7.

在C++中,关于运算符&,下面说法正确的是( )。

8.

如下图所示的邻接表结构,表示的是下列哪个选项中的图?

9.

关于图的深度优先搜索和广度优先搜索,下列说法错误的是( )。

10.

关于序列 {2,7,1,5,6,4,3,8,9} ,以下说法错误的是( )。

11.

下列选项中,哪个可能是下图的深度优先遍历序列( )。

12.

下面程序的输出为( )。

#include <iostream>
using namespace std;
int fib(int n) {
	if (n <= 1)
		return n;
	return fib(n - 1) + fib(n - 2);
}
int main() {
	cout << fib(6) << endl;
	return 0;
}
13.

图的存储和遍历算法,下面说法错误的是( )。

14.

如下图所示的邻接矩阵(inf表示无穷大),表示的是下列哪个选项中的图?

15.

下列C++代码的输出结果是( )。

#include <iostream>
#include <cmath>
using namespace std;
int main() {
	cout << sin(3.1415926 / 2);
	return 0;
}
判断题 共 10 题
1.

使用 math.h 或 cmath 头文件中的对数函数,表达式 log(128) 的结果类型为 double 、值约为 7.0 。

2.

现使用有 N 个表项的哈希表,从 M 个元素中进行查找。该哈希表为解决哈希函数冲突,为每个表项处建立单链表存储冲突元素。其查找操作的最坏情况时间复杂度为O(M)。

3.

泛洪算法的递归方法容易造成溢出,因此大的二维地图算法中,一般不用递归方法。

4.

C++语言中,表达式 6 & 5 的结果类型为 int 、值为 1 。

5.

C++语言中,可以为同一个类定义多个构造函数。

6.

动态规划有递推实现和递归实现,对于很多问题,通过记录子问题的解,两种实现的时间复杂度是相同的。

7.

唯一分解定理(算术基本定理)指出,每个大于1的自然数都可以唯一地分解成若干个素数的乘积。因此,我们可以很容易的对给定的自然数 n 进行质因数分解,时间复杂度仅为O(log(n))。

8.

非连通图不能使用广度优先搜索算法进行遍历。

9.

一颗 N 层的二叉树,至少有2N−1个节点。

10.

冒泡排序是稳定的排序算法。

编程题 共 2 题
1.

区间乘积

时间限制:1.0 s

内存限制:512.0 MB

题面描述

小杨有一个包含 n 个正整数的序列A=[a1,a2,...,an]。

小杨想知道有多少对<l,r>(1≤l≤r≤n) 满足al×al+1×...×ar为完全平方数。

一个正整数 x 为完全平方数当且仅当存在一个正整数 y 使得x=y×y。

输入格式

第一行包含一个正整数n,代表正整数个数。

第二行包含 n 个正整数a1,a2,...,an,代表序列A。

输出格式

输出一个整数,代表满足要求的 <l,r>数量。


输入样例

5
3 2 4 3 2

输出样例

2

样例解释

满足条件的 <l,r> 有<3,3> 和<1,5>。

数据范围

对于全部数据,保证有1≤n≤105,1≤ai≤30。

2.

黑白翻转

时间限制:1.0 s

内存限制:512.0 MB

题面描述

小杨有一棵包含 n 个节点的树,这棵树上的任意一个节点要么是白色,要么是黑色。小杨认为一棵树是美丽树当且仅当在删除所有白色节点之后,剩余节点仍然组成一棵树。

小杨每次操作可以选择一个白色节点将它的颜色变为黑色,他想知道自己最少要执行多少次操作可以使得这棵树变为美丽树。

输入格式

第一行包含一个正整数n,代表树的节点数。

第二行包含 n 个非负整数a1,a2,...,an,其中如果 ai=0,则节点 i的颜色为白色,否则为黑色。

之后 n−1 行,每行包含两个正整数xi,yi,代表存在一条连接节点xi和yi的边。

输出格式

输出一个整数,代表最少执行的操作次数。


输入样例

5
0 1 0 1 0
1 2
1 3
3 4
3 5

输出样例

2

样例解释

将节点 1 和 3 变为黑色即可使这棵树变为美丽树,此时删除白色节点 5,剩余黑色节点仍然组成一棵树。

数据范围

对于全部数据,保证有1≤n≤105,0≤ai≤1。

C++ 编辑器
输入
输出