CCF-GESP 等级考试 2023年12月认证C++六级真题解析

2023年12月真题

一、单选题(每题2分,共30分)

在这里插入图片描述
正确答案:D
考察知识点:类和对象
解析:自定义函数中不能嵌套定义新函数。

在这里插入图片描述
正确答案:C
考察知识点:类和对象
解析:内部类是需要通过外部类访问的。

在这里插入图片描述
在这里插入图片描述
正确答案:C
考察知识点:类和对象
解析:objCounter 是静态成员,2 种方式都可以访问。

在这里插入图片描述
正确答案:D
考察知识点:类和对象
解析:析构函数可以省略。系统可以默认一个析构函数。

在这里插入图片描述
在这里插入图片描述
正确答案:B
考察知识点:类和对象、二叉树
解析:对二叉树的先序遍历,根左右。

在这里插入图片描述
正确答案:B
考察知识点:链表
解析:实现一个链表,指向前面和后面的元素。

在这里插入图片描述
正确答案:B
考察知识点:霍夫曼编码
解析:霍夫曼编码。。按照出现次数进行赫夫曼编码。

在这里插入图片描述
在这里插入图片描述
正确答案:D
考察知识点:算法
解析:fiboA 函数会存在重复计算,执行效率不高。

在这里插入图片描述
正确答案:B
考察知识点:二叉树
解析:左右孩子也可以作为参数,不一定只有根节点。

在这里插入图片描述
正确答案:D
考察知识点:完全二叉树
解析:完全二叉树和满二叉树的节点下标是连续的,其他类型的节点数不确定,下标不一定连续,就不宜用 list 存储。

在这里插入图片描述
正确答案:A
考察知识点:二叉树
解析:构造二叉树,用括号表示法。1 是根结点,其左右孩子为2,3,写成1(2)(3)。用同样的思路构建左子树和右子树,选 A。

在这里插入图片描述
正确答案:A
考察知识点:函数的定义和调用
解析:bool 类型函数只能返回布尔类型,布尔值只有0 或者1。

在这里插入图片描述
正确答案:B
考察知识点:计算机基础知识
解析:本题考察计算机基础知识。通信卫星可以转发无线电信号,实现通信地球站间或地球站与航天器间的无线电通信,因此具有信号中继作用。选B。

在这里插入图片描述
正确答案:C
考察知识点:数学知识
解析:本题考察数学知识。线筛和埃筛都可以判断素数,枚举也可以,二分规模减半,不能合理判断。

在这里插入图片描述
正确答案:B
考察知识点:排序知识
解析:冒泡排序和快速排序,都属于交换排序。
交换排序:冒泡排序、快速排序
选择排序:简单选择排序、堆排序
插入排序:直接插入排序、希尔排序

二、判断题(每题2分,共20分)

在这里插入图片描述
正确答案:正确
考察知识点:类
解析:方法在 c++中也就是类内的函数。

在这里插入图片描述
正确答案:正确
考察知识点:类
解析:构造函数没有,系统会给一个默认的构造函数。

在这里插入图片描述
正确答案:正确
考察知识点:类
解析:标准库类型 vector 和 string 都重载了下标运算符。

在这里插入图片描述
正确答案:正确
考察知识点:算法
解析:深搜就是“能深则深、不能深则退”。

在这里插入图片描述
正确答案:错误
考察知识点:哈夫曼编码
解析:哈夫曼编码确实是唯一的。但是,这并不意味着它总是有确定的压缩率。压缩率通常定义为压缩后数据大小与原始数据大小的比值。对于哈夫曼编码来说,压缩率会受到输入数据的特性(如字符频率分布)的影响。不同的输入数据,即使使用相同的哈夫曼编码算法,也可能得到不同的压缩率。

在这里插入图片描述
正确答案:错误
考察知识点:指针
解析:一个指针的指向对象已被删除,那么就成了悬空指针。指针本身仍然存在,但它的指向变得不确定,因为原来的内存已经被释放并可能被重新分配给其他用途。可能会导致程序崩溃,但是可能正常执行。

在这里插入图片描述
正确答案:正确
考察知识点:二叉搜索树
解析:在理想情况下(即树是平衡的),二叉搜索树的高度为 h = l o g 2 ( N + 1 ) h=log_{2}(N+1) h=log2(N+1),其中 N N N 是节点的数量。对于查找操作,每次比较都能排除树的一半,所以查找的时间复杂度为 O ( l o g N ) O(logN) O(logN)
然而,在最坏情况下(例如树退化成链表),二叉搜索树的高度为N,此时查找的时间复杂度为 O ( N ) O(N) O(N)
平均情况下,二叉搜索树查找的时间复杂度确实是 O ( l o g N ) O(logN) O(logN)

在这里插入图片描述
正确答案:正确
考察知识点:二叉搜索树
解析:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。平均情况下是一分为二。

在这里插入图片描述
正确答案:正确
考察知识点:算法
解析:可以的。N 除了自身,只能有 1 个大于等于n/2 的因子。

在这里插入图片描述
正确答案:正确
考察知识点:算法
解析:都是相邻的数字交换。

三、编程题(每题25分,共50分)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本题考察 动态规划

从 0 关出发,每次都有 m 种选择,选第i 个关卡,到达的下一个关卡是 0 + m i 0+ m_i 0+mi,同时获得第i个关卡的关卡分数。当关卡的总和大于等于 N 的时候,便停止游戏。求通关时最多能够获得的分数。

游戏开始,处在第0关,且通道 1 < = a i < = N 1<=a_i<=N 1<=ai<=N,因此经过的关卡只能越来越大,可以从关卡0遍历上去。给除0之外的关卡设定一个最小值(-2147483648)的初始得分,0关卡的初始得分为0,当遍历到第i个关卡,如果其值不为最小值,说明其可达(从0关卡经过若干步到达),则给从i关卡可到的关卡赋值。如果原值比较大,保持不变,如果从i过去更大,则更新成更大的值。

#include<bits/stdc++.h>
using namespace std;
const int N=1e4;
const int INF=-2147483648;
int n, m, a[100], b[N], dp[N+1];
int main() {
	cin>>n>>m;
	for(int i=0; i<m; i++) cin>>a[i];
	for(int i=0; i<n; i++) cin>>b[i];
	//将除0之外关卡的初始得分置为最小值,表示不可达 
	for(int i=1; i<=n; i++) dp[i]=INF;
	for(int i=0; i<n; i++) {
		if(dp[i] != INF) { //如果关卡i可达,计算下一个可达关卡的最多得分 
			for(int j=0; j<m; j++) { 
				int pos = i+a[j]>=n ? n : i+a[j]; //通关得分记录在dp[n] 
				dp[pos] = max(dp[pos], dp[i]+b[i]);
			}
		}
	}
	cout<<dp[n];
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本题考察 树结构,深搜

n个员工,编号0~n-1,m个员工参与一个会议,找一个人主持会议,要求这个人可以管理与会的所有人,一个人可以管理自己,管理自己的直接下属,管理自己直接下属的下属,如果多人满足要求,求出最大的编号。本题本质上是求多个点的最近公共祖先(LCA)

数据量不大,且某员工的编号一定小于其直接领导的编号,可以按照编号从大到小进行遍历,判断该编号的员工是否可以领导所有与会者。

#include<bits/stdc++.h>
using namespace std;
int n, f[300], q, m, a[300];
//判断x是否可以管理y 
bool find(int x, int y){
	if(y==0 && x!=0) return false; //如果y是0但x不是0,则x不可能管理y,返回false
	if(f[y] == x) return true; //如果x是y的直系领导,返回true 
	return find(x, f[y]); //x是否是y的领导的领导 
}
//判断x是否可以管理所有与会者 
bool check(int x){
	for(int i=0; i<m; i++){
		//x可以管理第i个与会者:1、x就是第i个与会者;2、x是第i个与会者的直接或者间接领导
		//都不符合,则返回false,只要有一个管理不了,即意味着管理不了所有与会者 
		if(x!=a[i] && !find(x, a[i])) return false;
	}
	return true;
}
int main() {
	cin>>n;
	for(int i=1; i<n; i++) cin>>f[i];
	cin>>q;
	while(q--){
		cin>>m;
		for(int i=0; i<m; i++) cin>>a[i];
		for(int i=n-1; i>=0; i--){ //按编号从大到小遍历所有人,如果某个人可以管理所有与会者,则输出 
			if(i==0) cout<<0<<endl;
			else if(check(i)){
				cout<<i<<endl;
				break;
			}
		}
	}
	return 0;
}
### 回答1: 安装Ubuntu 20.04虚拟机的步骤如下: 1. 下载并安装虚拟机软件,如VMware Workstation或VirtualBox。 2. 下载Ubuntu 20.04的ISO镜像文件。 3. 打开虚拟机软件,创建一个新的虚拟机。 4. 在创建虚拟机的过程中,选择Ubuntu 64位操作系统,并将ISO镜像文件作为虚拟光驱加载。 5. 设置虚拟机的硬件配置,如内存大小、硬盘大小等。 6. 启动虚拟机,并按照安装向导的提示进行安装。 7.安装过程中,选择安装Ubuntu并设置相关选项,如时区、语言、用户名和密码等。 8. 安装完成后,重启虚拟机并登录Ubuntu系统。 9. 安装所需的软件和驱动程序,以满足个人需求。 以上就是安装Ubuntu 20.04虚拟机的步骤,希望对您有所帮助。 ### 回答2: Ubuntu是目前主流的Linux发行版之一,网上也有很多关于它的教程。如果想要安装Ubuntu的话,可以通过虚拟机来进行尝试,避免直接在主机上安装时造成不必要的风险和影响。下面就是Ubuntu 20.04虚拟机安装教程。 首先需要下载安装虚拟机软件,常见的有VMware、VirtualBox等。不同虚拟机软件的安装步骤略有不同,但都有类似的向导指导安装。 到Ubuntu官网下载最新稳定版的ISO镜像文件,然后打开虚拟机软件进行安装。 步骤如下: 1. 打开虚拟机软件,点击“新建虚拟机”。 2. 在向导界面中选择“自定义”模式进行安装,并选择需要的Ubuntu版本(例如:Ubuntu 20.04 Desktop)。 3. 根据计算机的配置选择RAM大小,建议不要低于2GB。 4. 创建虚拟磁盘。如果需要更多磁盘空间,可设置为动态分配,不过这样会造成一定的性能损失。 5. 安装完成后进入虚拟机,选择安装Ubuntu的方式,建议选择“安装Ubuntu”并打开网络连接。 6.安装过程中,需要设置语言、时区、键盘布局以及用户名和密码等信息。如果已经有其他系统安装在计算机上,可以选择双系统安装。 7. 等待安装完成并重启虚拟机后进入Ubuntu系统。 8. 安装VMware Tools/VirtualBox Guest Additions等增强工具,以便更好地与主机进行文件共享、剪切板等功能的交互。 安装Ubuntu虚拟机的好处是可以在一个安全的环境中进行实验,而且即使出了问题,也不会影响到主机本身的系统。同时,Ubuntu也为用户提供了很强的定制性和灵活性,适合开发、测试和学习等多种场景。 ### 回答3: Ubuntu 20.04是一种流行的Linux操作系统,可在虚拟机安装使用。虚拟机软件提供计算机虚拟化技术,使得可以在一个操作系统内同时运行多个不同操作系统。这样用户可以使用多个操作系统,并在同一硬件上进行测试、虚拟化实验或者在操作系统之间切换。以下是Ubuntu 20.04虚拟机上的安装教程。 第一步:下载虚拟机软件 首先从虚拟机软件的官方网站下载并安装一款虚拟机软件,比如VMware Workstation、Oracle VirtualBox、Hyper-V等,本文以VMware Workstation为例。 第二步:下载Ubuntu20.04镜像文件 在Ubuntu官方网站下载Ubuntu 20.04镜像文件,镜像格式通常为.iso文件。下载完成后,将镜像文件保存至本地硬盘。 第三步:创建虚拟机 打开VMware Workstation软件,点击新建虚拟机,按照向导创建虚拟机,指定Ubuntu 20.04的镜像文件路径,设置虚拟机内存、CPU、硬盘等参数,最后启动虚拟机。 第四步:开始安装Ubuntu 20.04 启动虚拟机后,我们会看到Ubuntu 20.04安装界面,通过向导指定安装语言、键盘布局、时区等信息,然后输入用户名密码,最后开始安装。 第五步:安装过程中的设置 在安装过程中,我们可以设置一些选项,如是否安装第三方软件、设置分区和磁盘加密等。在安装过程结束后,我们需要重新启动虚拟机。 第六步:安装VMware Tools 安装VMware Workstation时,其自带了一个VMware Tools软件包,可以提供更好的虚拟化性能和功能。我们需要将VMware Tools安装Ubuntu 20.04中,在虚拟机菜单中选择VM -> Install VMware Tools,然后按照向导进行安装。 通过以上步骤,我们就可以在虚拟机中成功安装Ubuntu 20.04。在虚拟机中进行开发和测试的时候,我们可以根据需要修改虚拟机的配置,如虚拟CPU、内存等,来获得更好的性能表现。虚拟机提供了一种非常便捷的运行多个操作系统的方式,对开发、测试者以及技术爱好者来说都是一种非常有价值的技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值