当前位置: 首页 > news >正文

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

在这里插入图片描述

第1题:石头剪刀布

石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。
一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问,小A和小B比了N轮之后,谁赢的轮数多?
时间限制:1000
内存限制:65536
输入
输入包含三行。 第一行包含三个整数:N,NA,NB,分别表示比了N轮,小A出拳的周期长度,小B出拳的周期长度。0 < N,NA,NB < 100。 第二行包含NA个整数,表示小A出拳的规律。 第三行包含NB个整数,表示小B出拳的规律。 其中,0表示“石头”,2表示“剪刀”,5表示“布”。相邻两个整数之间用单个空格隔开。
输出
输出一行,如果小A赢的轮数多,输出A;如果小B赢的轮数多,输出B;如果两人打平,输出draw。
样例输入
10 3 4
0 2 5
0 5 0 2
样例输出
A
提示
对于测试数据,猜拳过程为: A:0 2 5 0 2 5 0 2 5 0 B:0 5 0 2 0 5 0 2 0 5 A赢了4轮,B赢了2轮,双方打平4轮,所以A赢的轮数多。

以下是使用C语言编写的解决方案,用于判断小A和小B在石头剪刀布游戏中谁赢得的轮数更多:

#include <stdio.h>int main() {int N, NA, NB;scanf("%d %d %d", &N, &NA, &NB);int A[100], B[100];for (int i = 0; i < NA; i++) {scanf("%d", &A[i]);}for (int i = 0; i < NB; i++) {scanf("%d", &B[i]);}int countA = 0, countB = 0;for (int i = 0; i < N; i++) {int a = A[i % NA];int b = B[i % NB];if ((a == 0 && b == 2) || (a == 2 && b == 5) || (a == 5 && b == 0)) {countA++;} else if ((b == 0 && a == 2) || (b == 2 && a == 5) || (b == 5 && a == 0)) {countB++;}}if (countA > countB) {printf("A\n");} else if (countB > countA) {printf("B\n");} else {printf("draw\n");}return 0;
}

在此解决方案中,我们首先使用scanf函数读取输入的整数N、NA和NB,以及小A和小B出拳的规律。

然后,我们使用两个数组AB分别存储小A和小B出拳的规律。接着,我们使用循环来模拟小A和小B进行猜拳的过程,并根据规则判断谁赢得了每一轮的比赛,并统计各自的胜利轮数。

最后,我们根据小A和小B的胜利轮数比较结果,使用printf函数输出结果。

编译并运行上述代码,根据给定的输入示例,将会输出小A和小B在石头剪刀布游戏中谁赢得的轮数更多:

A

第2题:谁考了第k名

在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
时间限制:1000
内存限制:65536
输入
第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n)。 其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
输出
输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)
样例输入
5 3
90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9
样例输出
90788004 68.4

以下是使用C语言编写的解决方案,用于找出考试中第k名学生的学号和成绩:

#include <stdio.h>typedef struct {int studentID;float score;
} Student;int main() {int n, k;scanf("%d %d", &n, &k);Student students[100];for (int i = 0; i < n; i++) {scanf("%d %f", &students[i].studentID, &students[i].score);}// 使用冒泡排序对学生按成绩进行降序排序for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (students[j].score < students[j + 1].score) {Student temp = students[j];students[j] = students[j + 1];students[j + 1] = temp;}}}printf("%d %g\n", students[k - 1].studentID, students[k - 1].score);return 0;
}

在此解决方案中,我们首先使用scanf函数读取输入的学生人数n和要求的第k名学生k。

然后,我们定义了一个名为Student的结构体,它包含学号和成绩两个字段。接着,我们定义了一个学生数组students,用于存储每个学生的信息。

接下来,我们使用一个循环读取每个学生的学号和成绩,并将其存储在students数组中。

然后,我们使用冒泡排序算法对学生数组按成绩进行降序排序,以便找出第k名学生。

最后,我们使用printf函数输出第k名学生的学号和成绩。

编译并运行上述代码,根据给定的输入示例,将会输出考试中第k名学生的学号和成绩:

90788004 68.4

第3题:计算鞍点

给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。 鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。 例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
时间限制:1000
内存限制:65536
输入
输入包含一个5行5列的矩阵
输出
如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"
样例输入
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
样例输出
4 1 8

以下是使用C语言编写的解决方案,用于找出给定矩阵的鞍点:

#include <stdio.h>int main() {int matrix[5][5];// 读取矩阵输入for (int i = 0; i < 5; i++) {for (int j = 0; j < 5; j++) {scanf("%d", &matrix[i][j]);}}int saddleRow = -1, saddleCol = -1;int foundSaddle = 0;// 遍历每一行for (int i = 0; i < 5; i++) {int maxInRow = matrix[i][0];int colIndex = 0;// 找到当前行的最大值和对应的列索引for (int j = 1; j < 5; j++) {if (matrix[i][j] > maxInRow) {maxInRow = matrix[i][j];colIndex = j;}}// 检查最大值是否为所在列的最小值int isSaddle = 1;for (int k = 0; k < 5; k++) {if (matrix[k][colIndex] < maxInRow) {isSaddle = 0;break;}}// 如果是鞍点,则记录行、列和值,并标记为已找到if (isSaddle) {saddleRow = i + 1;saddleCol = colIndex + 1;foundSaddle = 1;break;}}// 输出结果if (foundSaddle) {printf("%d %d %d\n", saddleRow, saddleCol, matrix[saddleRow - 1][saddleCol - 1]);} else {printf("not found\n");}return 0;
}

在此解决方案中,我们首先定义一个5x5的整数矩阵matrix,用于存储输入的矩阵数据。

然后,我们使用嵌套的循环结构读取输入矩阵的每个元素,并将其存储在matrix中。

接下来,我们使用两个循环嵌套遍历矩阵的每一行,找到每行的最大值及其对应的列索引。

然后,我们检查最大值是否为所在列的最小值。如果是,我们将记录鞍点的行、列和值,并将foundSaddle标记为1,表示已找到鞍点。

最后,根据foundSaddle的值,我们使用printf函数输出鞍点的行、列和值,或输出"not found"。

编译并运行上述代码,根据给定的输入示例,将会输出给定矩阵的鞍点:

4 1 8

第4题:合法 C 标识符

给定一个不包含空白符的字符串,请判断是否是C语言合法的标识符号(注:题目保证这些字符串一定不是C语言的保留字)。
C语言标识符要求:
1.非保留字;
2.只包含字母、数字及下划线(“_”)。
3.不以数字开头。
时间限制:1000
内存限制:65536
输入
一行,包含一个字符串,字符串中不包含任何空白字符,且长度不大于20。
输出
一行,如果它是C语言的合法标识符,则输出yes,否则输出no。
样例输入
RKPEGX9R;TWyYcp
样例输出
no

以下是使用C语言编写的解决方案,用于判断给定的字符串是否是C语言合法的标识符:

#include <stdio.h>
#include <string.h>
#include <ctype.h>int isValidIdentifier(const char *str) {int length = strlen(str);// 检查长度是否超过20个字符if (length > 20) {return 0;}// 检查是否以数字开头if (isdigit(str[0])) {return 0;}// 检查每个字符是否合法for (int i = 0; i < length; i++) {if (!(isalnum(str[i]) || str[i] == '_')) {return 0;}}return 1;
}int main() {char str[21];scanf("%s", str);if (isValidIdentifier(str)) {printf("yes\n");} else {printf("no\n");}return 0;
}

在此解决方案中,我们首先定义了一个名为isValidIdentifier的函数,用于判断给定字符串是否是合法的C语言标识符。

在该函数中,我们首先获取字符串的长度,并检查长度是否超过20个字符。如果超过,我们返回0表示不合法。

接下来,我们检查字符串是否以数字开头。如果是,我们返回0表示不合法。

然后,我们遍历字符串的每个字符,检查是否是字母、数字或下划线。如果不是,我们返回0表示不合法。

最后,如果字符串通过了上述所有条件的检查,我们返回1表示合法。

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

然后,我们使用scanf函数读取字符串。

接下来,我们调用isValidIdentifier函数判断字符串是否是合法的C语言标识符。

最后,根据isValidIdentifier的返回值,我们使用printf函数输出"yes"或"no",表示给定字符串是否是合法的C语言标识符。

编译并运行上述代码,根据给定的输入示例,将会输出"no",表示给定字符串不是合法的C语言标识符。

第5题:与指定数字相同的数的个数

输出一个整数序列中与指定数字相同的数的个数。
时间限制:1000
内存限制:65536
输入
输入包含三行: 第一行为N,表示整数序列的长度(N <= 100); 第二行为N个整数,整数之间以一个空格分开; 第三行包含一个整数,为指定的整数m。
输出
输出为N个数中与m相同的数的个数。
样例输入
3
2 3 2
2
样例输出
2

以下是使用C语言编写的解决方案,用于计算整数序列中与指定数字相同的数的个数:

#include <stdio.h>int main() {int N;scanf("%d", &N);int sequence[N];for (int i = 0; i < N; i++) {scanf("%d", &sequence[i]);}int m;scanf("%d", &m);int count = 0;for (int i = 0; i < N; i++) {if (sequence[i] == m) {count++;}}printf("%d\n", count);return 0;
}

在此解决方案中,我们首先定义一个变量N,用于存储整数序列的长度。

然后,我们使用scanf函数读取N的值。

接下来,我们定义一个整数数组sequence,大小为N,用于存储整数序列。

使用循环结构,我们遍历整数序列,并使用scanf函数将每个整数读取到sequence数组中。

然后,我们定义一个变量m,用于存储指定的整数。

再次使用scanf函数,我们读取m的值。

接下来,我们定义一个变量count,用于计算与m相同的数的个数。初始值为0。

使用循环结构,我们遍历整数序列,检查每个数是否与m相同。如果相同,我们将count加1。

最后,我们使用printf函数输出count的值,表示与m相同的数的个数。

编译并运行上述代码,根据给定的输入示例,将会输出"2",表示整数序列中与指定数字相同的数的个数为2。

相关文章:

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

第1题&#xff1a;石头剪刀布 石头剪刀布是常见的猜拳游戏。石头胜剪刀&#xff0c;剪刀胜布&#xff0c;布胜石头。如果两个人出拳一样&#xff0c;则不分胜负。 一天&#xff0c;小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的&#xff0c;比如&#xff1a;“…...

应用程序运行报错:First section must be [net] or [network]:No such file or directory

应用程序报错环境&#xff1a; 在linux下&#xff0c;调用darknet训练的模型&#xff0c;报错&#xff1a;First section must be [net] or [network]:No such file or directory&#xff0c;并提示&#xff1a;"./src/utils.c:256: error: Assertion 0 failed." 如…...

【ECMAScript】ES6-ES11学习笔记

文章目录 注意事项1.声明变量2.定义常量3.解构赋值4.模板字符串5.简化对象写法6.箭头函数7.参数默认值8.rest参数9.扩展运算符10.Symbol11.生成器函数12.Promise基本语法13.集合set14.Map15.类class16.数值扩展17.对象私有属性18.对象方法扩展19.js文件模块化20.async和await21…...

K8S MetalLB LoadBalancer

1. 简介 kubernetes集群没有L4负载均衡&#xff0c;对外暴漏服务时&#xff0c;只能使用nodePort的方式&#xff0c;比较麻烦&#xff0c;必须要记住不同的端口号。 LoadBalancer&#xff1a;使用云提供商的负载均衡器向外部暴露服务&#xff0c;外部负载均衡器可以将流量路由…...

kubernetes二进制部署2之 CNI 网络组件部署

CNI 网络组件部署 一&#xff1a;K8S提供三大接口1容器运行时接口CRI2云原生网络接口CNI3云原生存储接口CSI 部署 flannelK8S 中 Pod 网络通信&#xff1a;Overlay Network&#xff1a;VXLAN&#xff1a;Flannel:Flannel udp 模式的工作原理&#xff1a;ETCD 之 Flannel 提供说…...

docker通用镜像方法,程序更新时不用重新构建镜像

docker通用镜像方法&#xff0c;程序更新时不用重新构建镜像。更新可执行文件后&#xff0c;重新启动容器就可运行。 功能 1、在demo目录下添加脚本文件start.sh&#xff0c;里面执行demo.jar文件。 2、将demo目录映射到镜像下的 /workspace目录。 3、Dockerfile文件中默认…...

Spring Cloud构建微服务断路器介绍

什么是断路器 断路器模式源于Martin Fowler的Circuit Breaker一文。“断路器”本身是一种开关装置&#xff0c;用于在电路上保护线路过载&#xff0c;当线路中有电器发生短路时&#xff0c;“断路器”能够及时的切断故障电路&#xff0c;防止发生过载、发热、甚至起火等严重后果…...

[国产MCU]-BL602开发实例-OLED-SSD1306驱动与U8g2移植

OLED-SSD1306驱动与U8g2移植 文章目录 OLED-SSD1306驱动与U8g2移植1、OLED介绍2、SSD1306介绍2、U8g2介绍3、U8g2移植3.1 定义U8g2图形库的移植函数3.2 移植函数实现3.3 移植函数调用4、驱动测试本文将详细介绍如何在BL602中移植U8g2图形库,并通过U8g2库驱动OLED SSD1306显示屏…...

AWS asg(Auto Scaling Group)部署时报错Error: Termination Reason: Client.InternalError

背景 最近用一个terraform asg模块部署asg时一直报错 Error: Termination Reason: Client.InternalError: Client error on launch 搜索资料发现和KMS下面的asg 对应的policy有关系. 解决方法 在AWS界面找到KMS, 然后找到customer managed key导航栏, 最后找到对应AMI加密用…...

Redis—过期删除策略和内存淘汰策略

目录标题 过期删除策略如何设置过期时间查看key过期时间取消key过期时间如果判定key已过期过期删除策略定时删除惰性删除定期删除 Redis过期删除策略Redis如何实现定期删除第一种版本第二种版本 内存淘汰策略如何设置Redis最大运行内存第一种版本第二种版本 Redis内存淘汰策略不…...

连续两年增收不增利,比亚迪电子靠新能源汽车业务再次起飞?

在净利润连续两年下挫之后&#xff0c;比亚迪电子&#xff08;00285.HK&#xff09;终于迎来了好消息。 不久前比亚迪电子发布2023年中期盈利预告显示&#xff0c;上半年净利润同比增加115%-146%&#xff08;2022年上半年的净利润显示6.34亿元&#xff09;。 这主要受益于大客…...

echarts3d柱状图

//画立方体三个面 const CubeLeft echarts.graphic.extendShape({shape: {x: 0,y: 0,width: 9.5, //柱状图宽zWidth: 4, //阴影折角宽zHeight: 3, //阴影折角高},buildPath: function (ctx, shape) {const api shape.api;const xAxisPoint api.coord([shape.xValue, 0]);con…...

使用webpack插件webpack-dev-server 出现Cannot GET/的解决办法

问题描述 文档地址深入浅出webpack 使用 DevServer运行webpack&#xff0c;跑起来之后提示Cannot GET/&#xff1a; 解决方案&#xff1a; 查阅官方文档 根据目录结构修改对应的配置&#xff1a; 然后就可以成功访问&#xff1a;...

老网工必备好物,分享15个网络监控神器

下午好&#xff0c;我的网工朋友。 近年来&#xff0c;随着虚拟、云和边缘网络的增加&#xff0c;网络监控工具已经显得越来越重要。 在当今大多数企业中&#xff0c;监控混合IT环境中的网络流量对于主动网络管理至关重要。 无论是检测行为异常、占用带宽、应对新威胁&#…...

拒绝摆烂!C语言练习打卡第一天

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;每日一练 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ &#x1f5d2;️前言&#xff1a; 在前面我们学习完C语言的所以知识&#xff0c;当…...

Spring 使用注解开发、代理模式、AOP

使用注解开发 在Spring4之后&#xff0c;要使用注解开发&#xff0c;必须要保证AOP的包导入了 项目搭建&#xff1a; 在配置文件中导入约束&#xff0c;增加注解支持 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.spri…...

考公-判断推理-逻辑判断-翻译推理

第十节 前推后 例题 例题 例题 例题 例题 翻译规则之后推前 不 不能落下 谁必不可少&#xff0c;谁房箭头后面 例题 例题 例题 现实生活中觉得对&#xff0c;题干推不出 例题 例题...

关于MPU6050的VLOGIC引脚作用

关键字&#xff1a;MPU6X0X、 MPU6050、数字逻辑电平、VLOGIC 框图&#xff1a; 一、VLOGIC引脚作用? VLOGIC引脚主要用于设置为I2C供电引脚&#xff0c;以保证正确的I2C通信。 The bias and LDO section generates the internal supply and the reference voltages and cu…...

对约瑟夫问题的进一步思考

约瑟夫问题重述&#xff1a; 在计算机编程的算法中&#xff0c;类似问题又称为约瑟夫环 约瑟夫环&#xff1a;N个人围成一圈&#xff0c;从第一个开始报数&#xff0c;第M个将被杀掉&#xff0c;最后剩下一个&#xff0c;其余人都将被杀掉。 例如N6&#xff0c;M5&#xff0…...

程序员如何优雅的提升软件开发效率?

一、前言 面对日益发达的&#xff0c;极具诱惑力的夜生活&#xff0c;很少有人能置身事外。 但是有那么一群人&#xff0c;即使黑幕高垂还坚守在工作之位&#xff0c;无视夜晚的繁荣和喧嚣。 是的&#xff0c;他们就是程序员&#xff0c;一群成天编写代码的程序员。 相信&#…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...