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

news2025/2/5 16:49:47

2023年12月真题

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

在这里插入图片描述
正确答案:C
考察知识点:数学问题
解析:本题可抽象为分类计数问题,应使用加法原理,而不是乘法原理。答案为 ACB 的方案数 2 加上 ADB 的方案数 3,结果为5,选 C。

在这里插入图片描述
正确答案:A
考察知识点:C++语法
解析:C++在函数中把数组作为参数进行传递时,只会传递数组的首地址,函数中如果想要通过首地址计算数组中任意一位元素所处的地址时,就需要知道第二维数组的长度,比如第二维数组长度为 10 时,a[1][3]的地址就是a[0][0]的地址+13,本题的选项中只有选项 A 给出了数组第二维长度,所以本题选A。

在这里插入图片描述
正确答案:D
考察知识点:C++语法
解析:对象的声明周期开始和结束时会分别执行构造函数和析构函数,选项A、B 正确。对于选项 C、D,虚函数是指被 virtual 关键字修饰的成员函数,定义虚函数是为了允许用基类的指针来调用派生类的该函数。允许将析构函数定义为虚函数,是因为有使用“delete 基类指针”来销毁对象的需求,选项C正确。但对象构造时必须指定准确的类,不能使用基类名构造派生类的对象,没有将构造函数定义为虚函数的需要,选项 D 错误。

在这里插入图片描述
正确答案:B
考察知识点:图
解析:邻接矩阵的行列均为[0~n-1],所以矩阵的大小为n*n,本题选B。

在这里插入图片描述
正确答案:C
考察知识点:排列组合
解析:按照第 1,2,3,4,5 位的顺序依次安排同学,某位同学不能在第一位,所以第 1 位有 4 种安排方法,第二位可以从剩余的 4 名同学中选一位,有4种方法,依次类推,第 3,4,5 各有 3,2,1 种,总方案数为 44321=96,选C。

在这里插入图片描述
正确答案:D
考察知识点:图
解析:n 个顶点组成的树包含 n-1 条边,但是题目没有保证图连通,所以可能不存在最小生成树,选 D。

在这里插入图片描述
正确答案:A
考察知识点:数学知识
解析:若△ABC 中,已知两边 a.b 和它们的夹角 theta ,作边a 上的高h. 则S=(1/2)ah,而 h/b=sin(theta),即 h=b*sin(theta)
∴S=(1/2)absin(theta)选 A。

在这里插入图片描述
正确答案:C
考察知识点:二叉树
解析:树的遍历过程需要对每个元素访问一次,因此时间复杂度为O(n),选择 C。

在这里插入图片描述
正确答案:A
考察知识点:算法,时间复杂度
解析:本题代码为辗转相除法,复杂度为 O(logn)。最差情况,输入为斐波那契数列的相邻两项时,循环次数为输入在数列中的位置。选A。

在这里插入图片描述
正确答案:C
考察知识点:时间复杂度,快速幂
解析:本题代码为快速幂,复杂度为 O(logn)。通过观察可得该函数的时间复杂度只与 n 相关,假设为 T(n),则 T(n)=T(n / 2) + 常数,求解可得上述时间复杂度。选 C。

在这里插入图片描述
正确答案:D
考察知识点:时间复杂度
解析:本题代码是在计算 C[n][m],使用了递归的写法并加上了记忆化搜索,可以通过画图来看所有被访问到的二维数组个数,以 n=6,m=2 为例,可以发现访问的元素个数为 nm-mm,本题选 D。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
正确答案:B
考察知识点:图
解析:结构体 edge 里的 next 指向的是下一条边,Node 里的first 指向的是每个点的第一条边,所以 0 号点指向 1 号点,1 号点指向2,3 号点,2 号点指向3号点,3 号点指向 0 号点,选 B。

在这里插入图片描述
正确答案:B
考察知识点:多层循环
解析:代码中 a,b,h 的取值范围均为[1,10],要(a+b)*h=20,那么可能的h有1,2,4,5,10,h 为 1 时,(a+b)=20,有 1 种方法,h 为 2 时,(a+b)=10,有9 种方案,依次计算出 h 为 4,5,10 时,(a+b)的方案数依次为 4,3,1,总方案数为1+9+4+3+1=18,选 B。

在这里插入图片描述
正确答案:A
考察知识点:多层循环
解析:代码中要求 a,b,c 都是正整数,满足 a+b+c<=30 且,符合要求的a,b,c有 3 4 5;5 12 13;6 8 10 共 3 种,选 A。

在这里插入图片描述
在这里插入图片描述
正确答案:C
考察知识点:动态规划
解析:观察到 11 行的输出为 dis[y][x],而我们枚举的范围是<y 与<x,所以第10 行计算的肯定是 dis[i+1][j+1],排除 AB,接着看 C 选项第一个转移,dis[i][j+1],说明这里是从第一维转移过来,而第 5 行也是从第一维转移过来的,使用的是v数组,选项 C 正确,排除 D 选项,本题选 C。

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

在这里插入图片描述
正确答案:错误
考察知识点:C++语法
解析:x*2-4=0;既不是判断语句,也不是赋值语句。它不是合法的C++语句,不能通过编译。

在这里插入图片描述
正确答案:正确
考察知识点:排列组合
解析:可能出现红红红,蓝红红,红蓝红,红红蓝,蓝蓝红,红蓝蓝,蓝红蓝。

在这里插入图片描述
正确答案:正确
考察知识点:数学知识
解析:杨辉三角,是二项式系数在三角形中的一种几何排列,在中国南宋数学家杨辉所著的《详解九章算法》中出现。

在这里插入图片描述
正确答案:错误
考察知识点:图
解析:有向完全图,(x,y)和(y,x)不算同一条边,所以有N*(N-1)条边。

在这里插入图片描述
正确答案:正确
考察知识点:哈希表
解析:极端情况,可以先将待查找元素放进哈希表中,再根据位置构造一个由 if-else 判断组成的哈希函数:当查找元素与某一项待查找相同时,返回对应的位置。虽然这样构造的哈希函数的时间复杂度较高,但满足不会产生冲突。

在这里插入图片描述
正确答案:正确
考察知识点:动态规划
解析:动态规划的时间复杂度⼀般为状态数*转移复杂度。

在这里插入图片描述
正确答案:错误
考察知识点:数学知识、基本数据类型
解析:梯形面积可能带有小数,不能直接/2。

在这里插入图片描述
正确答案:错误
考察知识点:图
解析:还可以使用深度优先搜索算法。

在这里插入图片描述
正确答案:错误
考察知识点:二叉排序树
解析:最好情况的时间复杂度为 O(1),即二叉排序树的根即为查找的元素。

在这里插入图片描述
正确答案:正确
考察知识点:二分查找
解析:函数 y = x 2 y= x^2 y=x2在值域[0,+∞]上具有单调性。

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

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

本题考察 排列组合

题目保证奖品的数量不多不少,每位同学都可以恰好分到⼀个奖品,且最后剩余的奖品不超过1个。两种情况:奖品不剩余;奖品剩余一个。

奖品不剩余,即n件奖品分给n个人。n个人中抽 a 0 a_0 a0个人拿奖品 a 0 a_0 a0,再剩下人数中抽 a 1 a_1 a1个人拿奖品 a 1 a_1 a1,依次类推。则总方案数为: C n a 0 ∗ C n − a 0 a 1 ∗ . . . C n − a 0 − a 1 − . . . − a m − 2 a m − 1 = C n a 0 ∗ C n − a 0 a 1 ∗ . . . C a m − 1 a m − 1 C_{n}^{a_0}*C_{n-a_0}^{a_1}*...C_{n-a_0-a_1-...-a_{m-2}}^{a_{m-1}} = C_{n}^{a_0}*C_{n-a_0}^{a_1}*...C_{a_{m-1}}^{a_{m-1}} Cna0Cna0a1...Cna0a1...am2am1=Cna0Cna0a1...Cam1am1

奖品剩余1个,额外虚设一个人接受这个奖品,此时人数=奖品数,记为n,总方案数为: C n a 0 ∗ C n − a 0 a 1 ∗ . . . C n − a 0 − a 1 . . . − a m − 2 a m − 1 − 1 ∗ C 1 1 C_{n}^{a_0}*C_{n-a_0}^{a_1}*...C_{n-a_0-a_1...-a_{m-2}}^{a_{m-1}-1}*C_{1}^{1} Cna0Cna0a1...Cna0a1...am2am11C11,这和上边奖品不剩余的计算结果相同。

本题要计算很多组合,结合组合计算公式:c(n, m)=c(n-1, m-1)+c(n-1, m); ,用动态规划的思想进行预处理,否则会超时。

#include<bits/stdc++.h>
using namespace std;
const int N=1005, mod=1e9+7;
int c[N+5][N+5], arr[N+5];
//组合计算公式:c(n, m)=c(n-1, m-1)+c(n-1, m); 
void init() {
	c[0][0]=1;
	for(int i=1; i<=N; i++) {
		c[i][0]=c[i][i]=1;
		for(int j=1; j<i; j++) {
			c[i][j] = (c[i-1][j-1]+c[i-1][j])%mod;
		}
	}
}
int main() {
	init();
	int t;
	cin>>t;
	while(t--) {
		int n, m, sum=0;
		cin>>n>>m;
		for(int i=0; i<m; i++) {
			cin>>arr[i];
			sum += arr[i];
		}
		long long res=1;
		for(int i=0; i<m; i++) {
			res = res*c[sum][arr[i]]%mod;
			sum -= arr[i];
		}
		cout<<res<<endl;
	}
	return 0;
}

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

本题考察 树、最近公共祖先(LCA)

同期6级题目相同,但数据规模增大了很多,要使用倍增法或树链剖分来解决。

倍增法求解LCA:一个很清晰的讲解视频:7分钟学会倍增法求解LCA

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n, fa[N]; //fa[i]节点i的直接领导
int dep[N]; //dep[i]节点i的深度
vector<int> G[N]; //存储节点关系
int anc[N][20]; //ans[i][j] 节点i往上跳2^j步的祖先节点
int maxnode[N]; //maxnode[i] 节点i往上一条链上最大的值
//计算所有节点的深度并同步记录节点i往前跳2^0步的祖先节点
void dfs(int u, int fa, int max_value) {
	max_value=max(max_value, u);
	maxnode[u]=max_value;
	for(auto v : G[u]) {
		if(v == fa) continue; //保证向下访问
		dep[v]=dep[u]+1;
		anc[v][0]=u; //v的直接祖先节点为u
		dfs(v, u, max_value);
	}
}
//初始化:计算所有节点的深度以及倍增法求LCA预处理
void init() {
	dep[0]=1;
	dfs(0, -1, 0);
	for(int k=1; k<=18; k++) {
		for(int i=1; i<=n; i++) {
			anc[i][k]=anc[anc[i][k-1]][k-1]; //LCA预处理
		}
	}
}
//倍增法求最近公共祖先 
int lca(int u, int v) {
	//调平深度
	if(dep[v] > dep[u]) swap(u, v);
	for(int i=18; i>=0; i--) {
		if(dep[anc[u][i]] >= dep[v]) {
			u=anc[u][i];
		}
	}
	if(u==v) return u; //特判
	for(int i=18; i>=0; i--) {
		if(anc[u][i] != anc[v][i]) {
			u=anc[u][i];
			v=anc[v][i];
		}
	}
	return anc[u][0];
}
int main() {
	scanf("%d", &n);
	//输入编号为 i 的员工的直接领导fa[i]
	for(int i=1; i<n; i++) {
		scanf("%d", &fa[i]);
		G[fa[i]].push_back(i);
		G[i].push_back(fa[i]);
	}

	init(); //预处理

	int q; //q场合作
	scanf("%d", &q);
	while(q--) {
		int m, x, y;
		scanf("%d%d", &m, &x);
		for(int i=1; i<m; i++) {
			scanf("%d", &y);
			x = lca(x, y); //求x和y的最近公共祖先
		}
		printf("%d\n",maxnode[x]); //输出公共祖先中编号最大的员工 
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2293395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode搭建git

vscode搭建git 一、安装git二、vscode上搭建git(1) 先创建本地仓库再上传到远程仓库&#xff0c;远程仓库名是根据本地仓库名一致(2) 先创建远程仓库&#xff0c;再将本地仓库上传到指定远程仓库 一、安装git 网络教程很多&#xff0c;在此就不赘述了 参考&#xff1a;git安装…

解决Mac安装软件的“已损坏,无法打开。 您应该将它移到废纸篓”问题

mac安装软件时&#xff0c;如果出现这个问题&#xff0c;其实很简单 首先打开终端&#xff0c;输入下面的命令 sudo xattr -r -d com.apple.quarantine 输入完成后&#xff0c;先不要回车&#xff0c;点击访达--应用程序--找到你无法打开的app图标&#xff0c;拖到终端窗口中…

ChatGPT-4o和ChatGPT-4o mini的差异点

在人工智能领域&#xff0c;OpenAI再次引领创新潮流&#xff0c;近日正式发布了其最新模型——ChatGPT-4o及其经济实惠的小型版本ChatGPT-4o Mini。这两款模型虽同属于ChatGPT系列&#xff0c;但在性能、应用场景及成本上展现出显著的差异。本文将通过图文并茂的方式&#xff0…

读书笔记--分布式架构的异步化和缓存技术原理及应用场景

本篇是在上一篇的基础上&#xff0c;主要对分布式应用架构下的异步化机制和缓存技术进行学习&#xff0c;主要记录和思考如下&#xff0c;供大家学习参考。大家知道原来传统的单一WAR应用中&#xff0c;由于所有数据都在同一个数据库中&#xff0c;因此事务问题一般借助数据库事…

BUU10 [极客大挑战 2019]LoveSQL1

万能用户名&#xff08;密码随便&#xff09; 登录进去以后发现是这个东西&#xff0c;然而并没有什么卵用 然后就开始爆破数据库名字--表名--列名 注意&#xff1a;这道题需要将所有的表名都爆出来&#xff0c;需要在payload里头写 group_concat()&#xff0c;否则页面只会显…

tomcat核心组件及原理概述

目录 1. tomcat概述 1.1 概念 1.2 官网地址 2. 基本使用 2.1下载 3. 整体架构 3.1 核心组件 3.2 从web.xml配置和模块对应角度 3.3 如何处理请求 4. 配置JVM参数 5. 附录 1. tomcat概述 1.1 概念 什么是tomcat Tomcat是一个开源、免费、轻量级的Web服务器。 Tomca…

冰蝎v4.0.5 来啦

webshell始终是渗透测试的热门&#xff0c;上次护网写冰蝎检测规则&#xff0c;加密流量&#xff0c;有点压力&#xff0c;今天终于有空来复现一下&#xff0c;我知道玩知乎的大佬很多&#xff0c;轻一点喷&#xff0c;学习新知识不丢人&#xff5e; ailx10 1949 次咨询 4.9 …

【C++】B2120 单词的长度

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;我的做法代码实现&#xff1a;思路解析&#xff1a; &#x1f4af;老师的第一种做法代码实现&#xff1a;思路解析&#xff1a; &#x1f4af;老师的…

使用线性回归模型逼近目标模型 | PyTorch 深度学习实战

前一篇文章&#xff0c;计算图 Compute Graph 和自动求导 Autograd | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 使用线性回归模型逼近目标模型 什么是回归什么是线性回归使用 PyTorch 实现线性回归模型代码执行结…

深入浅出:频谱掩码 Spectral Masking —— 噪音消除利器

在语音处理领域&#xff0c;噪声是一个常见的敌人。无论是语音通话、语音识别&#xff0c;还是语音合成&#xff0c;噪声都会大大降低语音的质量和可理解性。为了解决这个问题&#xff0c;Spectral Masking&#xff08;频谱掩码&#xff09; 模型应运而生。它通过从带噪信号的频…

C++ Primer 多维数组

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

Mac M1 ComfyUI 中 AnyText插件安装问题汇总?

Q1&#xff1a;NameError: name ‘PreTrainedTokenizer’ is not defined ? 该项目最近更新日期为2024年12月&#xff0c;该时间段的transformers 版本由PyPI 上的 transformers 页面 可知为4.47.1. A1: transformers 版本不满足要求&#xff0c;必须降级transformors &#…

C++基础(2)

目录 1. 引用 1.1 引用的概念和定义 1.2 引用的特性 1.3 引用的使用 2. 常引用 3. 指针和引用的关系 4. 内联函数inline 5. nullptr 1. 引用 1.1 引用的概念和定义 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开…

electron typescript运行并设置eslint检测

目录 一、初始化package.json 二、安装依赖 三、项目结构 四、配置启动项 五、补充&#xff1a;ts转js别名问题 已整理好的开源代码&#xff1a;Type-Electron: 用typescript开发的electron项目脚手架&#xff0c;轻量级、支持一键配置网页转PC - Gitee.com 一、初始化pac…

modbus协议处理

//------------------------0x01-------------------------------- //MDA_usart_send: aa 55 01 00 06 00 02 00 05 //转modbusTCP——Master——send&#xff1a;地址00002&#xff0c;寄存器数量&#xff1a;00005 00 00 00 00 00 06 01 01 00 02 00 05 //ModbusTCP——Slave…

java-(Oracle)-Oracle,plsqldev,Sql语法,Oracle函数

卸载好注册表,然后安装11g 每次在执行orderby的时候相当于是做了全排序,思考全排序的效率 会比较耗费系统的资源,因此选择在业务不太繁忙的时候进行 --给表添加注释 comment on table emp is 雇员表 --给列添加注释; comment on column emp.empno is 雇员工号;select empno,en…

c++可变参数详解

目录 引言 库的基本功能 va_start 宏: va_arg 宏 va_end 宏 va_copy 宏 使用 处理可变参数代码 C11可变参数模板 基本概念 sizeof... 运算符 包扩展 引言 在C编程中&#xff0c;处理不确定数量的参数是一个常见的需求。为了支持这种需求&#xff0c;C标准库提供了 &…

linux 函数 sem_init () 信号量、sem_destroy()

&#xff08;1&#xff09; &#xff08;2&#xff09; 代码举例&#xff1a; #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <semaphore.h> #include <unistd.h>sem_t semaphore;void* thread_function(void* arg) …

基于python的体育新闻数据可视化及分析

项目 &#xff1a;北京冬奥会体育新闻数据可视化及分析 摘 要 随着社会的不断进步与发展&#xff0c;新时代下的网络媒体获取的信息也更加庞大和繁杂&#xff0c;相比于传统信息来源更加难以分析和辨别&#xff0c;造成了新时代媒体从业者撰写新闻的难度。在此背景下&#xff…

代码随想录算法【Day36】

Day36 1049. 最后一块石头的重量 II 思路 把石头尽可能分成两堆&#xff0c;这两堆重量如果相似&#xff0c;相撞后所剩的值就是最小值 若石头的总质量为sum&#xff0c;可以将问题转化为0-1背包问题&#xff0c;即给一个容量为sum/2的容器&#xff0c;如何尽量去凑满这个容…