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出拳的规律。
然后,我们使用两个数组A和B分别存储小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题:石头剪刀布 石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。 一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“…...
应用程序运行报错:First section must be [net] or [network]:No such file or directory
应用程序报错环境: 在linux下,调用darknet训练的模型,报错:First section must be [net] or [network]:No such file or directory,并提示:"./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负载均衡,对外暴漏服务时,只能使用nodePort的方式,比较麻烦,必须要记住不同的端口号。 LoadBalancer:使用云提供商的负载均衡器向外部暴露服务,外部负载均衡器可以将流量路由…...
kubernetes二进制部署2之 CNI 网络组件部署
CNI 网络组件部署 一:K8S提供三大接口1容器运行时接口CRI2云原生网络接口CNI3云原生存储接口CSI 部署 flannelK8S 中 Pod 网络通信:Overlay Network:VXLAN:Flannel:Flannel udp 模式的工作原理:ETCD 之 Flannel 提供说…...
docker通用镜像方法,程序更新时不用重新构建镜像
docker通用镜像方法,程序更新时不用重新构建镜像。更新可执行文件后,重新启动容器就可运行。 功能 1、在demo目录下添加脚本文件start.sh,里面执行demo.jar文件。 2、将demo目录映射到镜像下的 /workspace目录。 3、Dockerfile文件中默认…...
Spring Cloud构建微服务断路器介绍
什么是断路器 断路器模式源于Martin Fowler的Circuit Breaker一文。“断路器”本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路时,“断路器”能够及时的切断故障电路,防止发生过载、发热、甚至起火等严重后果…...
[国产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内存淘汰策略不…...
连续两年增收不增利,比亚迪电子靠新能源汽车业务再次起飞?
在净利润连续两年下挫之后,比亚迪电子(00285.HK)终于迎来了好消息。 不久前比亚迪电子发布2023年中期盈利预告显示,上半年净利润同比增加115%-146%(2022年上半年的净利润显示6.34亿元)。 这主要受益于大客…...
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,跑起来之后提示Cannot GET/: 解决方案: 查阅官方文档 根据目录结构修改对应的配置: 然后就可以成功访问:...
老网工必备好物,分享15个网络监控神器
下午好,我的网工朋友。 近年来,随着虚拟、云和边缘网络的增加,网络监控工具已经显得越来越重要。 在当今大多数企业中,监控混合IT环境中的网络流量对于主动网络管理至关重要。 无论是检测行为异常、占用带宽、应对新威胁&#…...
拒绝摆烂!C语言练习打卡第一天
🔥博客主页:小王又困了 📚系列专栏:每日一练 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 🗒️前言: 在前面我们学习完C语言的所以知识,当…...
Spring 使用注解开发、代理模式、AOP
使用注解开发 在Spring4之后,要使用注解开发,必须要保证AOP的包导入了 项目搭建: 在配置文件中导入约束,增加注解支持 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.spri…...
考公-判断推理-逻辑判断-翻译推理
第十节 前推后 例题 例题 例题 例题 例题 翻译规则之后推前 不 不能落下 谁必不可少,谁房箭头后面 例题 例题 例题 现实生活中觉得对,题干推不出 例题 例题...
关于MPU6050的VLOGIC引脚作用
关键字:MPU6X0X、 MPU6050、数字逻辑电平、VLOGIC 框图: 一、VLOGIC引脚作用? VLOGIC引脚主要用于设置为I2C供电引脚,以保证正确的I2C通信。 The bias and LDO section generates the internal supply and the reference voltages and cu…...
对约瑟夫问题的进一步思考
约瑟夫问题重述: 在计算机编程的算法中,类似问题又称为约瑟夫环 约瑟夫环:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。 例如N6,M5࿰…...
程序员如何优雅的提升软件开发效率?
一、前言 面对日益发达的,极具诱惑力的夜生活,很少有人能置身事外。 但是有那么一群人,即使黑幕高垂还坚守在工作之位,无视夜晚的繁荣和喧嚣。 是的,他们就是程序员,一群成天编写代码的程序员。 相信&#…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。
2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...
