2022年06月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

在这里插入图片描述

第1题:小白鼠再排队

N只小白鼠(1 < N < 100),每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量,要求按照白鼠重量从小到大的顺序输出它们头上帽子的颜色。帽子的颜色用 “red”,“blue”等字符串来表示。不同的小白鼠可以戴相同颜色的帽子。白鼠的重量用整数表示。
时间限制:1000
内存限制:65536
输入
输入第一行为一个整数N,表示小白鼠的数目。 下面有N行,每行是一只白鼠的信息。第一个为正整数,表示白鼠的重量,不超过整型范围;第二个为字符串,表示白鼠的帽子颜色,字符串长度不超过10个字符。 注意:白鼠的重量各不相同。
输出
按照白鼠的重量从小到大的顺序输出白鼠的帽子颜色。
样例输入
3
30 red
50 blue
40 green
样例输出
red
green
blue

以下是解决该问题的C语言代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef struct {int weight;char color[11];
} Mouse;int compare(const void* a, const void* b) {Mouse* mouseA = (Mouse*)a;Mouse* mouseB = (Mouse*)b;return mouseA->weight - mouseB->weight;
}int main() {int N;scanf("%d", &N);Mouse* mice = (Mouse*)malloc(N * sizeof(Mouse));for (int i = 0; i < N; i++) {scanf("%d %s", &mice[i].weight, mice[i].color);}qsort(mice, N, sizeof(Mouse), compare);for (int i = 0; i < N; i++) {printf("%s\n", mice[i].color);}free(mice);return 0;
}

你可以将上述代码保存为一个名为 “mouse_sort.c” 的文件,并使用C编译器进行编译和运行。在输入小白鼠的数目和每只白鼠的信息后,程序将按照白鼠的重量从小到大的顺序输出白鼠的帽子颜色。

代码中使用了一个结构体 Mouse 来表示每只小白鼠的信息,包括重量和帽子颜色。compare 函数用于作为 qsort 函数的比较函数,以便按照白鼠的重量进行排序。

在主函数中,我们首先读取小白鼠的数目 N,然后动态分配一个大小为 NMouse 数组。接下来,我们使用循环逐个读取每只小白鼠的信息,并将其保存在数组中。然后,我们使用 qsort 函数对数组进行排序,排序的依据是比较函数 compare。最后,我们使用循环按顺序输出排序后的小白鼠的帽子颜色。

请注意,这个解决方案假设输入是有效的,并且满足题目要求。如果输入超出限制范围或包含非法字符,可能会导致输出错误。

第2题:多余的数

小A同学在完成一个数学题:求给定的10个整数的和。小A同学在求完之后发现和参考答案对不上,检查后发现在求和过程中多计算了一个数,其他过程没有问题。现给出小A计算用的11个数,以及正确的参考答案,请算出小A同学多计算的那一个数。
时间限制:1000
内存限制:65536
输入
第一行11个正整数,每个数小于等于1000000 第二行一个整数,表示参考答案
输出
一个整数,表示多计算的那一个数。
样例输入
2 4 6 8 1 3 5 7 9 5 11
54
样例输出
7
提示
样例中原有的10个数为2 4 6 8 1 3 5 9 5 11,和为54,多余的数为7。

以下是解决该问题的C语言代码:

#include <stdio.h>int main() {int nums[11];int reference;int sum = 0;for (int i = 0; i < 11; i++) {scanf("%d", &nums[i]);sum += nums[i];}scanf("%d", &reference);int extraNum = sum - reference;printf("%d\n", extraNum);return 0;
}

你可以将上述代码保存为一个名为 “extra_number.c” 的文件,并使用C编译器进行编译和运行。在输入11个正整数和参考答案后,程序将计算出小A同学多计算的那个数并输出。

在主函数中,我们首先定义一个整型数组 nums 用于存储11个正整数,以及一个整数变量 reference 用于存储参考答案。然后,我们使用循环逐个读取这11个数,并将它们累加到变量 sum 中。接下来,我们读取参考答案。根据题目描述,多计算的那个数等于总和减去参考答案,因此我们计算出 extraNum。最后,我们输出 extraNum

请注意,这个解决方案假设输入是有效的,并且满足题目要求。如果输入超出限制范围,可能会导致输出错误。

第3题:打字员

有一个打字员,他打字的时候有个习惯,从来不用 Shift 来切换大小写,只用 Caps Lock。 现在给他一个地铁站的名字,你需要写一个程序来告诉他,他需要敲击多少下键盘才能打出 这个地铁站名。
时间限制:1000
内存限制:65536
输入
第一行输入一个数字 n (n<1000),表示共有多少个需要处理的车站名。从第 2 到第 n+1 行是这 n 个车站名。车站名由英文字母构成,名字的长度不会超过 100 个字符。已知开始时 键盘是输入小写字母的状态。
输出
这个打字员敲击键盘的次数。
样例输入
5
BeiJingDaXueDongMen
AAAaaaBBBbbbABAB
AmericanRAILWAY
AaAaAa
DFjfkdaB
样例输出
31
21
18
12
11

以下是解决该问题的C语言代码:

#include <stdio.h>
#include <string.h>int main() {int n;scanf("%d", &n);char station[101];for (int i = 0; i < n; i++) {scanf("%s", station);int len = strlen(station);int count = 0;int capsLock = 0;for (int j = 0; j < len; j++) {if (station[j] >= 'A' && station[j] <= 'Z') {if (!capsLock) {capsLock = 1;count++;}} else {if (capsLock) {capsLock = 0;count++;}}count++;}printf("%d\n", count);}return 0;
}

你可以将上述代码保存为一个名为 “typist.c” 的文件,并使用C编译器进行编译和运行。在输入车站名的数量以及每个车站名后,程序将计算出打字员敲击键盘的次数并输出。

在主函数中,我们首先读取车站名的数量 n。然后,使用循环逐个读取每个车站名,并进行处理。对于每个车站名,我们首先获取其长度 len,然后定义一个计数变量 count 和一个表示 Caps Lock 是否开启的标志变量 capsLock,初始状态下 capsLock 为 0。

接下来,我们使用另一个循环遍历车站名的每个字符。如果字符是大写字母,且 capsLock 为 0(表示当前是小写状态),则表示需要切换到大写状态,此时将 capsLock 设为 1,并将计数 count 加1。如果字符是小写字母,且 capsLock 为 1(表示当前是大写状态),则表示需要切换到小写状态,此时将 capsLock 设为 0,并将计数 count 加1。无论字符是大写字母还是小写字母,每遇到一个字符,计数 count 都需要加1。

最后,我们输出计数 count

请注意,这个解决方案假设输入是有效的,并且满足题目要求。如果输入超出限制范围,可能会导致输出错误。

第4题:最好的草

奶牛Bessie计划好好享受柔软的春季新草。新草分布在R行C列的牧场里。它想计算一下牧场中的草丛数量。
在牧场地图中,每个草丛要么是单个“#”,要么是有公共边的相邻两个“#”。给定牧场地图,计算有多少个草丛。
例如,考虑如下5行6列的牧场地图
. # . . . .
. . # . . .
. . # . . #
. . . # # .
. # . . . .
这个牧场有5个草丛:一个在第一行,一个在第二列横跨了二、三行,一个在第三行,一个在第四行横跨了四、五列,最后一个在第五行。
时间限制:10000
内存限制:65536
输入
第一行包含两个整数R和C,中间用单个空格隔开。 接下来R行,每行C个字符,描述牧场地图。字符只有“#”或“.”两种。(1 <= R, C <= 100 )
输出
输出一个整数,表示草丛数。
样例输入
5 6
.#…
…#…
…#…#
…##.
.#…
样例输出
5

以下是解决该问题的C语言代码:

#include <stdio.h>#define MAX_ROWS 100
#define MAX_COLS 100int countGrasslands(char field[MAX_ROWS][MAX_COLS], int rows, int cols) {int count = 0;int visited[MAX_ROWS][MAX_COLS] = {0};// 遍历牧场地图for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {// 如果当前位置是草丛且未被访问过if (field[i][j] == '#' && !visited[i][j]) {count++; // 增加草丛计数visited[i][j] = 1; // 标记当前位置为已访问// 标记与当前位置相邻的草丛为已访问// 向右搜索int k = j + 1;while (k < cols && field[i][k] == '#') {visited[i][k] = 1;k++;}// 向下搜索k = i + 1;while (k < rows && field[k][j] == '#') {visited[k][j] = 1;k++;}}}}return count;
}int main() {int rows, cols;scanf("%d %d", &rows, &cols);char field[MAX_ROWS][MAX_COLS];// 读取牧场地图for (int i = 0; i < rows; i++) {scanf("%s", field[i]);}int result = countGrasslands(field, rows, cols);printf("%d\n", result);return 0;
}

你可以将上述代码保存为一个名为 “grass.c” 的文件,并使用C编译器进行编译和运行。在输入牧场地图的行数、列数以及每个位置的字符后,程序将计算出草丛的数量并输出。

在主函数中,我们首先读取牧场地图的行数 rows 和列数 cols。然后,定义一个字符数组 field 用于存储牧场地图的每个位置的字符。

接下来,我们使用两个嵌套的循环来读取每个位置的字符,并将其存储在 field 数组中。

然后,我们调用 countGrasslands 函数来计算草丛的数量。该函数使用一个二维数组 visited 来记录位置是否被访问过。在遍历地图的过程中,如果遇到一个未被访问过的草丛位置,我们将计数增加,并将与该位置相邻的草丛位置标记为已访问。

最后,我们输出计数结果。

请注意,这个解决方案假设输入是有效的,并且满足题目要求。如果输入超出限制范围,可能会导致输出错误。

第5题:字符串中最长的连续出现的字符

求一个字符串中最长的连续出现的字符,输出该字符及其出现次数。字符串中无空白字符(空格、回车和tab),如果这样的字符不止一个,则输出出现最早的字符。
时间限制:1000
内存限制:65536
输入
一行,一个不包含空白字符的字符串,字符串长度小于200。
输出
一行,输出最长的连续出现的字符及其最长的连续出现次数,中间以一个空格分开。
样例输入
aaaaadbbbbbcccccccdddddddddd
样例输出
d 10

以下是解决该问题的C语言代码:

#include <stdio.h>
#include <string.h>void findLongestConsecutiveChar(char str[]) {int len = strlen(str);int maxCount = 0;char maxChar = str[0];int currentCount = 1;for (int i = 1; i < len; i++) {if (str[i] == str[i-1]) {currentCount++;} else {if (currentCount > maxCount) {maxCount = currentCount;maxChar = str[i-1];}currentCount = 1;}}if (currentCount > maxCount) {maxCount = currentCount;maxChar = str[len-1];}printf("%c %d\n", maxChar, maxCount);
}int main() {char str[201];scanf("%s", str);findLongestConsecutiveChar(str);return 0;
}

你可以将上述代码保存为一个名为 “longest.c” 的文件,并使用C编译器进行编译和运行。在输入字符串后,程序将计算出最长的连续出现的字符及其出现次数,并进行输出。

在主函数中,我们首先定义一个字符数组 str,用于存储输入的字符串。

接下来,我们调用 findLongestConsecutiveChar 函数来查找最长的连续出现的字符。该函数使用一个循环遍历字符串中的字符,并维护两个变量:maxCount 表示目前找到的最长连续出现次数,maxChar 表示对应的字符。我们还使用一个变量 currentCount 来记录当前字符的连续出现次数。

在遍历字符串的过程中,我们比较当前字符与前一个字符是否相同。如果相同,说明当前字符与前一个字符连续出现,将 currentCount 加1。如果不相同,说明当前字符打破了连续出现的序列,我们将比较当前的 currentCountmaxCount 的大小,如果 currentCount 大于 maxCount,则更新 maxCountmaxChar。然后,将 currentCount 重新置为1,以便开始计算下一个字符的连续出现次数。

最后,我们还需要在循环结束后再次比较 currentCountmaxCount,以处理最后一个字符连续出现的情况。

最终,我们输出 maxCharmaxCount

请注意,这个解决方案假设输入是有效的,并且满足题目要求。如果输入超出限制范围,可能会导致输出错误。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUUCTF [MRCTF2020]Ezpop解题思路

题目代码 Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack It! class Modifier {protected $var;publi…

基于深度学习的3D城市模型增强【Mask R-CNN】

在这篇文章中&#xff0c;我们描述了一个为阿姆斯特丹 3D 城市模型自动添加门窗的系统&#xff08;可以在这里访问&#xff09;。 计算机视觉用于从城市全景图像中提取有关门窗位置的信息。 由于这种类型的街道级图像广泛可用&#xff0c;因此该方法可用于较大的地理区域。 推荐…

数据结构:栈和队列(超详细)

目录 ​编辑 栈&#xff1a; 栈的概念及结构&#xff1a; 栈的实现&#xff1a; 队列&#xff1a; 队列的概念及结构&#xff1a; 队列的实现&#xff1a; 扩展知识&#xff1a; 以上就是个人学习线性表的个人见解和学习的解析&#xff0c;欢迎各位大佬在评论区探讨&#…

C++入门篇9---list

list是带头双向循环链表 一、list的相关接口及其功能 1. 构造函数 函数声明功能说明list(size_type n,const value_type& valvalue_type())构造的list中包含n个值为val的元素list()构造空的listlist(const list& x)拷贝构造list(InputIterator first, InputIterator…

Python爬虫——scrapy_当当网图书管道封装

创建爬虫项目 srcapy startproject scrapy_dangdang进入到spider文件里创建爬虫文件&#xff08;这里爬取的是青春文学&#xff0c;仙侠玄幻分类&#xff09; srcapy genspider dang http://category.dangdang.com/cp01.01.07.00.00.00.html获取图片、名字和价格 # 所有的se…

快速通过华为HCIP认证

你可以按照以下步骤进行准备和学习&#xff1a; 华为认证课程和资料--提取码:1234https://pan.baidu.com/s/1YJhD8QbocHhZ30MvrKm8hg 了解认证要求&#xff1a;查看华为官方网站上的HCIP认证要求和考试大纲&#xff0c;了解考试的内容、考试形式和考试要求。 学习相关知识&am…

c++ std::shared_ptr(内存布局)

https://cplusplus.com/reference/memory/shared_ptr/

AIGC绘画:kaggle部署stable diffusion项目绘画

文章目录 kaggle介绍项目部署edit my copy链接显示 结果展示 kaggle介绍 Kaggle成立于2010年&#xff0c;是一个进行数据发掘和预测竞赛的在线平台。从公司的角度来讲&#xff0c;可以提供一些数据&#xff0c;进而提出一个实际需要解决的问题&#xff1b;从参赛者的角度来讲&…

泛微E-Office任意文件上传漏洞复现

0x01 产品简介 泛微E-Office是一款标准化的协同 OA 办公软件&#xff0c;泛微协同办公产品系列成员之一,实行通用化产品设计&#xff0c;充分贴合企业管理需求&#xff0c;本着简洁易用、高效智能的原则&#xff0c;为企业快速打造移动化、无纸化、数字化的办公平台。 0x02 漏…

【Linux】Reactor模式

Reactor模式 Reactor模式的定义 Reactor反应器模式&#xff0c;也叫做分发者模式或通知者模式&#xff0c;是一种将就绪事件派发给对应服务处理程序的事件设计模式。 Reactor模式的角色构成 Reactor主要由以下五个角色构成&#xff1a; reactor模式的角色 角色解释Handle(句…

TIA博途_通过EXCEL快速给PLC程序段添加注释信息的方法示例

通过EXCEL快速给PLC程序段添加注释信息的方法示例 如下图所示,以OB1为例,正常情况下,我们可以在博途中直接输入各个程序段的注释信息, 但是如果程序段较多的话,逐个输入的话效率不高,此时可以参考下面这种通过EXCEL进行快速添加的方法。 如下图所示,选中某个OB或FC、FB块…

线性代数再回顾

最近&#xff0c;在深度学习线性代数&#xff0c;之前大一的时候学过线性代数&#xff0c;但那纯属于是应试用的&#xff0c;考试一考完&#xff0c;啥都忘了&#xff0c;也说出不出个所以然&#xff0c;所以&#xff0c;在B站的MIT的线性代数以及3blue1brown线性代数的本质中去…

Vim学习(二)—— 编译C程序

打开终端&#xff0c;这里以MobaXterm为例&#xff0c; 邮件创建新的空文件并命名&#xff0c; 然后cd到对应路径下&#xff0c;用 vim hello.cvim打开创建的文件&#xff0c;进入编辑模式&#xff0c;编辑完程序后按Esc退出编辑模式&#xff0c;输入 :wq保存并退出&#xf…

uniapp微信小程序消息订阅快速上手

一、微信公众平台小程序开通消息订阅并设置模板 这边的模板id和详细内容后续前后端需要使用 二、uniapp前端 需要是一个button触发 js&#xff1a; wx.getSetting({success(res){console.log(res)if(res.authSetting[scope.subscribeMessage]){// 业务逻辑}else{uni.request…

Linux下如何修改CPU 电源工作模式

最近处理一起历史遗留问题&#xff0c;感觉很爽。 现象&#xff1a; 背景&#xff1a;设备采用ARM&#xff0c;即rk3568处理器&#xff0c;采用Linux系统&#xff1b;主要用于视觉后端处理 现象&#xff1a;当软件运行一段时间&#xff0c;大概1个小时&#xff08;也不是很固定…

对话 4EVERLAND:Web3 是云计算的新基建吗?

在传统云计算的发展过程中&#xff0c;数据存储与计算的中心化问题&#xff0c;对用户来说一直存在着潜在的安全与隐私风险——例如单点故障可能会导致网络瘫痪和数据泄露等危险。同时&#xff0c;随着越来越多 Web3 项目应用的落地&#xff0c;对于数据云计算的性能要求也越来…

Kotlin runBlocking launch多个协程读写mutableListOf时序

Kotlin runBlocking launch多个协程读写mutableListOf时序 import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlockingfun main(args: Array<String>) {var lists mutableListOf<String>()runBlocking {launch {r…

《零基础7天入门Arduino物联网-05》电路基础知识下

配套视频课程&#xff1a;《零基础学Arduino物联网&#xff0c;入门到进阶》 配套课件资料获取&#xff1a;微联实验室 配套学习套件购买&#xff1a;淘宝搜索店铺【微联实验室】 电阻、电容、电感和二极管 电阻 电阻用于电路中&#xff0c;其主要功能在于控制电流的流动和阻…

R语言实现非等比例风险生存资料分析(1)

#非等比例风险的生存资料分析 ###1 生成模拟数据### library(flexsurv) set.seed(123) # 生成样本数量 n <- 100 # 生成时间数据 time <- sample(1:1000,n,replaceF) # 调整shape和scale参数以控制生存曲线形状 # 生成事件数据&#xff08;假设按比例风险模型&#xff0…

GitHub 如何部署写好的H5静态页面

感谢粉皮zu的私信&#xff0c;又有素材写笔记了。(●’◡’●) 刚好记录一下我示例代码的GitHub部署配置&#xff0c;以便于后期追加仓库。 效果 环境 gitwin 步骤 第一步 新建仓库 第二步 拉取代码 将仓库clone到本地 git clone 地址第三步 部署文件 新建.github\workflo…