2023年CCF非专业级别软件能力认证第二轮 (CSP-S)提高级C++语言试题

2023年CCF非专业级别软件能力认证第二轮 (CSP-S)提高级C++语言试题
编程题
第 1 题    问答题
密码锁(lock)
题目描述
小Y有一把五个拨圈的密码锁。如图所示,每个拨圈上是从0到9的数字。每个拨圈都是从0到9的循环,即9拨动一个位置后可以变成0或8,

因为校园里比较安全,小Y采用的锁车方式是:从正确密码开始,随机转动密码锁仅一次;每次都是以某个幅度仅转动一个拨圈或者同时转动两个相邻的拨圈。当小Y选择同时转动两个相邻拨圈时,两个拨圈转动的幅度相同,即小Y可以将密码锁从00115转成11115,但不会转成12115。
时间久了,小Y也担心这么锁车的安全性,所以小Y记下了自己锁车后密码锁的n个状态,注意这n个状态都不是正确密码。
为了检验这么锁车的安全性,小Y有多少种可能的正确密码,使得每个正确密码都能够按照他所采用的锁车方式产生锁车后密码锁的全部n个状态。
输入格式
从文件lock.in中读入数据。
输入的第一行包含一个正整数n,表示锁车后密码锁的状态数。
接下来n行每行包含五个整数,表示一个密码锁的状态。
输出格式
输出到文件lock.out中。
输出一行包含一个整数,表示密码锁的这n个状态按照给定的锁车方式能对应多少种正确密码。
样例1输入
1
0 0 1 1 5
样例1输出
81
样例1解释
一共有81种可能的方案。
其中转动一个拨圈的方案有45种,转动两个拨圈的方案有36种。
样例2
见选手目录下的lock/lock2.in与lock/lock2.ans。


第 2 题    问答题
消消乐(game)
题目描述
小L现在在玩一个低配版本的消消乐,该版本的游戏是一维的,一次也只能消除两个相邻的元素。
现在,他有一个长度为n且仅由小写字母构成的字符串。我们称一个字符串是可消除的,当且仅当可以对这个字符串进行若干次操作,使之成为一个空字符串。
其中每次操作可以从字符串中删除两个相邻的相同字符,操作后剩余字符串会拼接在一起。
小L想知道,这个字符串的所有非空连续子串中,有多少个是可消除的。
输入格式
从文件game.in中读入数据。
输入的第一行包含一个正整数n,表示字符串的长度。
输入的第二行包含一个长度为n且仅由小写字母构成的的字符串,表示题目中询问的字符串。
输出格式
输出到文件game.out中。
输出一行包含一个整数,表示题目询问的答案。
样例1输入
8
accabccb
样例1输出
5
样例1解释
一共有5个可消除的连续子串,分别是cc、acca、cc、bccb、accabccb。
样例2
见选手目录下的game/game2.in与game/game2.ans。
样例3
见选手目录下的game/game3.in与game/game3.ans。
样例4
见选手目录下的game/game4.in与game/game4.ans。


第 3 题    问答题
结构体(struct)
题目背景
在C++等高级语言中,除了int和float等基本类型外,通常还可以自定义结构体类型。在本题当中,你需要模拟一种类似C++的高级语言的结构体定义方式,并计算出相应的内存占用等信息。
题目描述
在这种语言中,基本类型共有4种:byte,short,int,long,分别占据1,2,4,8字节的空间。
定义一个结构体类型时,需要给出类型名和成员,其中每个成员需要按顺序给出类.型和名称。类型可以为基本类型,也可以为先.定义过的结构体类型。注意,定义结构体类型时不会定义具体元素,即不占用内存。
定义一个元素时,需要给出元素的类型和名称。元素将按照以下规则占据内存:
• 元素内的所有成员将按照定义时给出的顺序在内存中排布,对于类型为结构体的成员同理。
• 为了保证内存访问的效率,元素的地址占用需要满足对齐规则,即任何类型的大小和该类型元素在内存中的起始地址均应对齐到该类型对齐要求的整数倍。具体而言:
–对于基本类型:对齐要求等于其占据空间大小,如int类型需要对齐到4字节,其余同理。
–对于结构体类型:对齐要求等于其成员的对齐要求的最大值,如一个含有int和short的结构体类型需要对齐到4字节。
以下是一个例子(以C++语言的格式书写):
struct d {
    short a;
    int b;
    short c;
};
d e;
该代码定义了结构体类型d与元素e。元素e包含三个成员e.a,e.b,e.c,分别占据第0∼1,4∼7,8∼9字节的地址。由于类型d需要对齐到4字节,因此e占据了第0∼11字节的地址,大小为12字节。
你需要处理n次操作,每次操作为以下四种之一:
1.定义一个结构体类型。具体而言,给定正整数k与字符串s,t1,n1,...,tk,nk,其中k表示该类型的成员数量,s表示该类型的类型名,t1,t2,...,tk按顺序分别表示每个成员的类型,n1,n2,...,nk按顺序分别表示每个成员的名称。你需要输出该结构体类型的大小和对齐要求,用一个空格分隔。
2.定义一个元素,具体而言,给定字符串t,n分别表示该元素的类型与名称。所有被定义的元素将按顺序,从内存地址为0开始依次排开,并需要满足地址对齐规则。你需要输出新定义的元素的起始地址。
3.访问某个元素。具体而言,给定字符串s,表示所访问的元素。与C++等语言相同,采用.来访问结构体类型的成员。如a.b.c,表示a是一个已定义的元素,它是一个结构体类型,有一个名称为b的成员,它也是一个结构体类型,有一个名称为c的成员。你需要输出如上被访问的最内层元素的起始地址。
4.访问某个内存地址。具体而言,给定非负整数addr,表示所访问的地址,你需要判断是否存在一个基本类型的元素占据了该地址。若是,则按操作3中的访问元素格式输出该元素;否则输出ERR。
输入格式
从文件struct.in中读入数据。
第1行:一个正整数n,表示操作的数量。
接下来若干行,依次描述每个操作,每行第一个正整数op表示操作类型:
•若op=1,首先输入一个字符串s与一个正整数k,表示类型名与成员数量,接下来k行每行输入两个字符串ti,ni,依次表示每个成员的类型与名称。
•若op=2,输入两个字符串t,n,表示该元素的类型与名称。
•若op=3,输入一个字符串s,表示所访问的元素。
•若op=4,输入一个非负整数addr,表示所访问的地址。
输出格式
输出到文件struct.out中。
输出n行,依次表示每个操作的输出结果,输出要求如题目描述中所述。
样例1输入
5
1 a 2
short aa
int ab
1 b 2
a ba
long bb
2 b x
3 x.ba.ab
4 10
样例1输出
8 4
16 8
0
4
x.bb
样例1解释
结构体类型a中,int类型的成员aa占据第0∼3字节地址,short类型的成员ab占据第4∼5字节地址。又由于其对齐要求为4字节,可得其大小为8字节。由此可同理计算出结构体类型b的大小为16字节,对齐要求为8字节。
样例2
见选手目录下的struct/struct2.in与struct/struct2.ans。
样例2解释
第二个操作4中,访问的内存地址恰好在为了地址对齐而留下的“洞”里,因此没有基本类型元素占据它。
样例3
见选手目录下的struct/struct3.in与struct/struct3.ans。
数据范围
对于全部数据,满足1≤n≤100,1≤k≤100,0≤addr≤1018。
所有定义的结构体类型名、成员名称和定义的元素名称均由不超过10个字符的小
写字母组成,且都不是byte,short,int,long(即不与基本类型重名)。
所有定义的结构体类型名和元素名称互不相同,同一结构体内成员名称互不相同。
但不同的结构体可能有相同的成员名称,某结构体内的成员名称也可能与定义的结构体或元素名称相同。
保证所有操作均符合题目所述的规范和要求,即结构体的定义不会包含不存在的类型、不会访问不存在的元素或成员等。
保证任意结构体大小及定义的元素占据的最高内存地址均不超过10^18。


特殊性质A:没有操作1;
特殊性质B:只有一个操作1;
特殊性质C:所有操作1中给出的成员类型均为基本类型;
特殊性质D:基本类型只有long。
提示
对于结构体类型的对齐要求和大小,形式化的定义方式如下:
•设该结构体内有k个成员,其大小分别为s1,...,sk,对齐要求分别为a1,...,ak;
•则该结构体的对齐要求为a=max{a1,...,ak};
•再设这些成员排布时的地址偏移量分别为o1,...,ok,则:
–o1=0;
–对于i=2,...,k,oi为满足oi−1+si−1≤oi且ai整除oi的最小值;
–则该结构体的大小s为满足ok+sk≤s且a整除s的最小值;
对于定义元素时的内存排布,形式化的定义方式如下:
•设第i个被定义的元素大小为si,对齐要求为ai,起始地址为bi;
•则b1=0,对于2≤i,bi为满足bi−1+si−1≤bi且ai整除bi的最小值。


第 4 题    问答题
种树(tree)
题目描述
你是一个森林养护员,有一天,你接到了一个任务:在一片森林内的地块上种树,并养护至树木长到指定的高度。
森林的地图有n片地块,其中1号地块连接森林的入口。共有n−1条道路连接这些地块,使得每片地块都能通过道路互相到达。最开始,每片地块上都没有树木。
你的目标是:在每片地块上均种植一棵树木,并使得i号地块上的树的高度生长到不低于ai米。
你每天可以选择一个未种树且与某个已种树的地块直接邻接(即通过单条道路相.连)的地块,种一棵高度为0米的树。如果所有地块均已种过树,则你当天不进行任何操作。特别地,第1天你只能在1号空地种树。
对每个地块而言,从该地块被种下树的当天开始,该地块上的树每天都会生长一定的高度。由于气候和土壤条件不同,在第x天,i号地块上的树会长高max(bi+x∗ci,1)
米。注意这里的x是从整个任务的第一天,而非种下这棵树的第一天开始计算。
你想知道:最少需要多少天能够完成你的任务?
输入格式
从文件tree.in中读入数据。
输入的第一行包含一个正整数n,表示森林的地块数量。
接下来n行:每行包含三个整数ai,bi,ci,分别描述一片地块,含义如题目描述中所述。
接下来n−1行:每行包含两个正整数ui,vi,表示一条连接地块ui和vi的道路。
输出格式
输出到文件tree.out中。
输出一行仅包含一个正整数,表示完成任务所需的最少天数。
样例1输入
4
12 1 1
2 4 ‐1
10 3 0
7 10 ‐2
1 2
1 3
3 4
样例1输出
1 5
样例1解释
第1天:在地块1种树,地块1的树木长高至2米。
第2天:在地块3种树,地块1,3的树木分别长高至5,3米。
第3天:在地块4种树,地块1,3,4的树木分别长高至9,6,4米。
第4天:在地块2种树,地块1,2,3,4的树木分别长高至14,1,9,6米。
第5天:地块1,2,3,4的树木分别长高至20,2,12,7米。
样例2
见选手目录下的tree/tree2.in与tree/tree2.ans。
样例3
见选手目录下的tree/tree3.in与tree/tree3.ans。
样例4
见选手目录下的tree/tree4.in与tree/tree4.ans。
数据范围
对于所有测试数据有:1≤n≤105,1≤ai≤1018,1≤bi≤109,0≤|ci|≤109,1≤ui,vi≤n。

保证存在方案能在109天内完成任务
特殊性质A:对于所有1≤i≤n,均有ci=0;
特殊性质B:对于所有1≤i<n,均有ui=i,vi=i+1;
特殊性质C:与任何地块直接相连的道路均不超过2条;
特殊性质D:对于所有1≤i<n,均有ui=1。

更多历年真题请查看网站:

网站链接 

青少年软件编程历年真题模拟题实时更新

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OmniFocus Pro for Mac(GTD时间管理软件) OmniFocus Mac版

OmniFocus Pro 3 for Mac 中文激活版是一款功能强大且灵活的 GTD 时间管理工具&#xff0c;可为您提供无干扰的环境&#xff0c;帮助您可以轻松地从邮件&#xff0c;消息&#xff0c;Safari 和任何其他第三方应用程序中安排任务&#xff0c;编写备注和剪辑信息。您可以快速轻松…

【OJ比赛日历】快周末了,不来一场比赛吗? #11.11-11.17 #12场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-11-11&#xff08;周六&#xff09; #5场比赛2023-11-12…

kubernetes集群编排——k8s调度

nodename vim nodename.yaml apiVersion: v1 kind: Pod metadata:name: nginxlabels:app: nginxspec:containers:- name: nginximage: nginxnodeName: k8s2 nodeName: k8s2 #找不到节点pod会出现pending&#xff0c;优先级最高 kubectl apply -f nodename.yamlkubectl get pod …

uniapp踩坑之项目:隐藏显示密码功能

1.input组件的password设置为动态前面加:冒号&#xff1b; 2.动态切换眼睛图标使用:style //html <view> 密码&#xff1a;<input placeholder"请输入密码" :password"openPassword" type"text" placeholder-style"color:#e2e2e2;…

C++ 图解二叉树非递归中序 + 实战力扣题

leetCode 94.二叉树的中序遍历 94. 二叉树的中序遍历 - 力扣&#xff08;LeetCode&#xff09; 算法思路&#xff1a; 总结&#xff1a; 对中序遍历这个例子进行总结&#xff0c;找出打印“中”节点的时刻&#xff0c;来寻找本质。打印的是一棵二叉树的“中”节点&#xff0c…

53基于matlab的Tamura纹理特征提取

基于matlab的Tamura纹理特征提取&#xff0c;包括粗糙度、对比度、方向度、线性度、规则度、粗糙度六种&#xff0c;可替换自己的数据进行特征提取。程序已调通&#xff0c;可直接运行。 53 方向度、线性度、规则度 (xiaohongshu.com)

线性代数(五) | 矩阵对角化 特征值 特征向量

文章目录 1 矩阵的特征值和特征向量究竟是什么&#xff1f;2 求特征值和特征向量3 特征值和特征向量的应用4 矩阵的对角化 1 矩阵的特征值和特征向量究竟是什么&#xff1f; 矩阵实际上是一种变换,是一种旋转伸缩变换&#xff08;方阵&#xff09; 不是方阵的话还有可能是一种…

【Docker安装RockeMQ:基于Windows宿主机,并重点解决docker rocketMQ安装情况下控制台无法访问的问题】

拉取镜像 docker pull rocketmqinc/rocketmq创建网络 docker network create rocketmq-net构建namesrv容器 docker run -d -p 9876:9876 -v D:/dockerFile/rocketmq/namesrv/logs:/root/logs -v D:/dockerFile/rocketmq/namesrv/store:/root/store --network rocketmq-net -…

面试10000次依然会问的【线程池】,你还不会?

线程池的基本概念 线程池是一种基于池化技术的线程使用方式&#xff0c;它允许我们有效地管理和复用线程&#xff0c;减少线程的创建和销毁的开销&#xff0c;从而提高系统的响应速度。在Java中&#xff0c;线程池的管理主要通过ThreadPoolExecutor类来实现。 线程池的定义与…

【Python】AppUI自动化—appium自动化开发环境部署、APP测试案例(17)上

文章目录 一.appium简介1.什么是appium2.appium 的工作原理3.APP类型4.APP页面布局 二,appium开发环境部署&#xff08;python环境&#xff09;1.下载安装环境1.1.下载安装所需环境1.2.Appium-desktop&#xff08; Appium-Server-GUI &#xff09;配置1.3.Appium-Inspector 配置…

Python堆栈详细介绍

概要 虽然一些数据结构是通用的并且可以在广泛的应用中使用&#xff0c;但其他数据结构是专门化的并且被设计用于处理特定问题。堆栈就是这样一种专门的结构&#xff0c;以其简单性和非凡的实用性而闻名。 那么&#xff0c;什么是栈呢&#xff1f;从本质上讲&#xff0c;堆栈…

web3通过antd 在React dapp中构建订单组件基本结构

上文web3 dapp React项目引入 antd 对 balance 用户token信息组件进行样式改造 中 我们导入 antd组件 算是比较完整的编写了用户资产组件 那么 今天开始 我们就要说订单组件了 这个就会比之前的复杂很多 我们还是先开环境 ganache 终端执行 ganache -d然后 将合约 发布到区块链…

使用promise创建一个同步事件驱动api

使用promise创建一个同步事件驱动api 事件驱动体系结构(EDA)是一种强大的方法&#xff0c;可以在网络上构建松散耦合、性能好、可伸缩的应用程序。它支持非常多功能&#xff0c;如推送通知、协作编辑和多人操作&#xff0c;以及其他实时交互。 但有时模型与我们开发人员需要的…

【树的存储结构,孩子链表】

文章目录 树和森林树的存储结构孩子链表 树和森林 森林&#xff1a;是m(m>0)棵互不相交的树的集合。 树的存储结构 1.双亲表示法 实现&#xff1a;定义结构数组存放树的结点&#xff0c;每个结点含两个域。 数据域&#xff1a;存放结点本身信息。 双亲域&#xff1a;指…

虚假内容检测,谣言检测,不实信息检测,事实核查;纯文本,多模态,多语言;数据集整理

本博客系博主个人理解和整理所得&#xff0c;包含内容无法详尽&#xff0c;如有补充&#xff0c;欢迎讨论。 这里只提供数据集相关介绍和来源出处&#xff0c;或者下载地址等&#xff0c;因版权原因不提供数据集所含的元数据。如有需要&#xff0c;请自行下载。 “Complete d…

亚马逊云科技海外服务器初体验

目录 前言亚马逊云科技海外服务器概述注册使用流程实例创建性能表现用户体验服务支持初体验总结 前言 随着云原生技术的飞速发展&#xff0c;越来越多的企业和开发者选择云服务器来作为自己的使用工具&#xff0c;云原生技术的发展也促进了云服务厂商的产品发展&#xff0c;所…

Leetcode Hot 100之四:283. 移动零+11. 盛最多水的容器

283.移动零 题目&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] …

算法通关村第七关-黄金挑战二叉树迭代遍历

大家好我是苏麟 , 今天带来二叉树的迭代遍历 . 二叉树的迭代遍历 前序编列 描述 : 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 题目 : LeetCode 二叉树的前序遍历 : 144. 二叉树的前序遍历 分析 : 前序遍历是中左右&#xff0c;如果还有左子树就一…

一款基于.Net开发、开源、支持多平台云存储文件管理器

目录 01 项目简介02 项目代码03 部分截图04 项目地址 今天给大家推荐一款基于基于.Net开发、开源的&#xff0c;支持多平台的云存储文件管理器。 01 项目简介 Camelotia是一款云存储文件管理器&#xff0c;基于.Net UI框架和ReactiveUI框架开发的&#xff0c;目前支持的平台有…

AI:75-基于生成对抗网络的虚拟现实场景增强

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…