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

news2024/11/27 23:26:22

在这里插入图片描述

第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。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OSCS开源安全周报第 55 期:JeecgBoot 远程代码执行漏洞

本周安全态势综述 OSCS 社区共收录安全漏洞 11 个&#xff0c;公开漏洞值得关注的是 JeecgBoot 远程代码执行漏洞、企业微信私有化后台API未授权访问漏洞、WPS Office 存在代码执行漏洞(MPS-3pcb-l4mv)、Microsoft Exchange Server 远程代码执行漏洞(CVE-2023-38182)、Smartbi…

SDK是什么,SDK和API有什么区别

SDK&#xff08;Software Development Kit&#xff09;是一种开发工具包&#xff0c;通常由软件开发公司或平台提供&#xff0c;用于帮助开发人员构建、测试和集成特定平台或软件的应用程序。SDK 包含一系列的库、工具、示例代码和文档&#xff0c;旨在简化开发过程并提供所需的…

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

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

【学会动态规划】最大子数组和(19)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

【PDF.js】PDF.js的简单使用与CDN加速遇到的问题

PDF.js的简单使用与CDN加速遇到的问题 一、PDF.js是什么&#xff1f;二、PDF.js三、 选择PDF.js的版本下载1. Prebuilt (现代浏览器) *作者选择2. Prebuilt (历史淘汰浏览器)3. Source 来源4. 通过CDN加速5. 文件树PrebuiltSource 6. 尝试查看器 四、选择文档&#xff08;不是使…

IC人必看| 模拟IC方向面试常考问题及答案汇总(二)

有不少小伙伴说还想要更多模拟IC方向的面试题目&#xff0c;这不就来了&#xff01;&#xff08;文末可领全部面试题目&#xff09; 1. Bandgap 里有几种反馈&#xff1f;原理是&#xff1f; 正反馈和负反馈。 2. 负反馈种类&#xff1f;负反馈的优点&#xff1f; 种类&am…

mqttfx连上OneNET生成token时的一大坑,报用户名或密码错误

整个流程如下连接&#xff1a; MQTT.fx和MQTTX 链接ONENET物联网开发平台避坑细节干货。 其中在生成token时&#xff0c;搞了半天在连接后都会报用户名密码错误 最后发现是格式问题&#xff0c;输入所有字符后一定要双击看是否可以全选中&#xff0c;可以全选中说明字符的格式…

【boost网络库从青铜到王者】第二篇:asio网络编程中的socket的监听和连接

文章目录 1、网络编程基本流程2、终端节点endpoint的创建2.1、客户端终端节点endpoint的创建2.2、服务器终端节点endpoint的创建 3、服务器与客户端通信套接字socket的创建4、服务器监听套接字socket的创建5、绑定accpet监听套接字6、客户端连接指定的端点7、服务器接收连接8、…

H5 和小程序的区别

什么是小程序&#xff1f; 从“微信之父” 张小龙的定义里&#xff0c;我们可以了解到&#xff0c;小程序其实就是内嵌在微信&#xff0c;不需要安装和卸载的一种新应用形态。它具备的两个强属性&#xff1a;提高效率&#xff0c;用完即走&#xff01;因此小程序的设计以轻便、…

vue element 多图片组合预览

定义组件&#xff1a;preview-image <template><div><div class"imgbox"><divclass"preview-img":class"boxClass"v-if"Imageslist 3 ||Imageslist 5 ||Imageslist 7 ||Imageslist 8 ||Imageslist > 9"&…

SQLyog中导入CSV文件入库到MySQL中

1.在数据库中新建一个表&#xff0c;设置列名&#xff08;与待导入文件一致&#xff09;&#xff0c;字段可以多出几个都可以 2.右键表名&#xff0c;导入- - >导入使用本地加载的CSV数据 选择使用加载本地CVS数据 3.指定好转义字符&#xff0c;将终止设置为,号(英文状态下…

微型导轨在包棉机中的作用

随着工业革命的开展&#xff0c;各种人工智能设备的迅猛发展&#xff0c;为了适应高速发展的工业自动化&#xff0c;越来越多的工业企业开始采用微型导轨&#xff0c;尤其是在包棉机中的应用。 包棉机是一种用于加工棉花的机械设备&#xff0c;它的主要功能是将原始棉花经过清洁…

zabbix监控tomcat

一、zabbix监控Tomcat1.1 zbx-agent配置1.1.1 关闭防火墙&#xff0c;将安装 Tomcat 所需软件包传到/opt目录下1.1.2 安装JDK1.1.3 设置JDK环境变量1.1.4 安装启动Tomcat1.1.5 配置 JMX 1.2 zbx-server配置1.2.1 安装zabbix&#xff08;省略&#xff0c;可看上一篇博客&#xf…

【校招VIP】前端JS语言考点之px rem等单位

考点介绍&#xff1a; rem vm等问题是前端面试里的高频题型。但是不少同学并不能很清楚的说明为什么在有px单位之后&#xff0c;还需要rem单位&#xff1f;往往会往不对的自适应方向回答。 作为基础性问题&#xff0c;只要回答不出来&#xff0c;面试就通过不了&#xff0c;需要…

在vue中使用swiper轮播图(搭配watch和$nextTick())

在组件中使用轮播图展示图片信息&#xff1a; 1.下载swiper,5版本为稳定版本 cnpm install swiper5 2.在组件中引入swiper包和对应样式&#xff0c;若多组件使用swiper&#xff0c;可以把swiper引入到main.js入口文件中&#xff1a; import swiper/css/swiper.css //引入swipe…

树莓派3B CSI摄像头配置

1.硬件连接 1、找到 CSI 接口(树莓派3B的CSI接口在HDMI接口和音频口中间)&#xff0c;需要拉起 CSI 接口挡板,如下&#xff1a; 2、将摄像头排线插入CSI接口。记住&#xff0c;有蓝色胶带的一面应该面向音频口或者网卡方向&#xff0c; 确认方向并插紧排线&#xff0c;将挡板…

基于Spring Boot的高校图书馆管理系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的高校图书馆管理系统的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java sp…

springBoot 集中配置管理

springBoot 集中配置管理 项目配置如果上线项目&#xff0c;运维或者开发者可以直接和jar包同目录下创建文件&#xff0c;然后更改属性 项目配置 创建文件&#xff0c;调整配置如果上线项目&#xff0c;运维或者开发者可以直接和jar包同目录下创建文件&#xff0c;然后更改 属…

海格里斯HEGERLS四向穿梭车仓储解决方案在电子商务行业中的应用

随着现代物流&#xff0c;尤其是智能化物流的飞速发展&#xff0c;河北沃克金属制品有限公司看到了智能物流领域背后的巨大价值和市场空间&#xff0c;深知物流与供应链对企业发展的重要性。于是&#xff0c;引进了先进的高科技智能技术—HEGERLS四向穿梭车技术&#xff0c;并迅…

echarts-convert.js使用

echarts-convert.js demo 点击下载 1、本地安装phantom.js插件 点击下载 2、更改文件路径 &#xff08;D:\phantomjs-2.1.1-windows\bin&#xff09;改为本地项目文件路径 3、打开cmd命令行&#xff0c;并格式化语言 运行以下命令 将命令行语言改为中文简体 chcp 65001…