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.hqwc.cn/news/69971.html

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

相关文章

AutoSAR配置与实践(基础篇)3.1 BSW架构和主要功能概要

传送门 点击返回 ->AUTOSAR配置与实践总目录 AutoSAR配置与实践(基础篇)3.1 BSW架构和主要功能概要 一、什么叫BSW二、分层介绍BSW主要功能2.1 微处理器抽象层MCAL2.2 ECU抽象层2.3 服务层2.4 复杂驱动CDD三、总结BSW各层主要功能一、什么叫BSW BSW是Basic Software的缩…

如何用树莓派Pico针对IoT编程?

目录 一、Raspberry Pi Pico 系列和功能 二、Raspberry Pi Pico 的替代方案 三、对 Raspberry Pi Pico 进行编程 硬件 软件 第 1 步&#xff1a;连接计算机 第 2 步&#xff1a;在 Pico 上安装 MicroPython 第 3 步&#xff1a;为 Thonny 设置解释器 第 4 步&#xff…

Python遍历多个子文件夹并基于文件名特征将文件复制到不同的目标文件夹

本文介绍基于Python语言&#xff0c;遍历一个大文件夹中大量的子文件夹&#xff0c;并将每一个子文件夹中大量的文件&#xff0c;按照每一个文件的文件名称的特点与差异&#xff0c;自动创建多个目标文件夹&#xff0c;并将指定文件复制到不同的目标文件夹中的方法。 首先&…

ChatGPT​保密吗?它有哪些潜在风险?如何规避?

自2022年11月公开发布以来&#xff0c;ChatGPT已成为许多企业和个人的必备工具&#xff0c;但随着该技术越来越多地融入我们的日常生活&#xff0c;人们很自然地想知道&#xff1a;ChatGPT是否是保密的。 问&#xff1a;ChatGPT保密吗&#xff1f; 答&#xff1a;否&#xff0…

【自动电压调节器】无功功率控制的终端电压控制研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Python pycparser(c文件解析)模块使用教程

文章目录 安装 pycparser 模块模块开发者网址获取抽象语法树1. 需要导入的模块2. 获取 不关注预处理相关 c语言文件的抽象语法树ast3. 获取 预处理后的c语言文件的抽象语法树ast 语法树组成1. 数据类型定义 Typedef2. 类型声明 TypeDecl3. 标识符类型 IdentifierType4. 变量声明…

Mongodb基础操作

一、简介 MongoDB是一个NoSQL型的数据库&#xff0c;基于分布式文档型储存数据库&#xff0c;由C语言编写&#xff0c;它的特点是开源、高性能、高可用、高扩展、易部署。支持 Golang、RUBY、PYTHON、JAVA、C、PHP等多种开发语言。 二、应用场景 MongoDB适用于高并发读写、数据…

word之插入尾注+快速回到刚才编辑的地方

1-插入尾注 在编辑文档时&#xff0c;经常需要对一段话插入一段描述或者附件链接等&#xff0c;使用脚注经常因占用篇幅较大导致文档页面内容杂乱&#xff0c;这事可以使用快捷键 ControlaltD 即可在 整个行文的末尾插入尾注&#xff0c;这样文章整体干净整洁&#xff0c;需…

[oneAPI] 手写数字识别-BiLSTM

[oneAPI] 手写数字识别-BiLSTM 手写数字识别参数与包加载数据模型训练过程结果 oneAPI 比赛&#xff1a;https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI&#xff1a;https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToo…

实习笔记(一)

自定义注解&#xff1a; 自定义注解中有三个元注解Target,Retention,Document /*** 系统日志注解** author Mark sunlightcsgmail.com*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface SysLog {String value() default "…

nodejs+vue+elementui学生档案信息管理系统_06bg9

利用计算机网络的便利&#xff0c;开发一套基于nodejs的大学生信息管理系统&#xff0c;将会给人们的生活带来更多的便利&#xff0c;而且在经济效益上&#xff0c;也会有很大的便利!这可以节省大量的时间和金钱。学生信息管理系统是学校不可缺少的一个环节&#xff0c;其内容直…

Mac安装opencv后无法导入cv2的解决方法

前提条件&#xff1a;以下两个插件安装成功 pip install opencv-python pip install --user opencv-contrib-python 注&#xff1a;直接用pip install opencv-contrib-python如果报错&#xff0c;就加上“–user" 第一步&#xff1a; 设置–添加python解释器 第二步&am…