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

news2024/9/25 11:19:17

在这里插入图片描述

第1题:统计误差范围内的数

统计一个整数序列中与指定数字m误差范围小于等于X的数的个数。
时间限制:5000
内存限制:65536
输入
输入包含三行:
第一行为N,表示整数序列的长度(N <= 100);
第二行为N个整数,整数之间以一个空格分开;
第三行包含2个整数,为指定的整数m,误差范围X。
输出
输出为N个数中与指定数字m误差范围小于等于X的数的个数。
样例输入
5
1 2 3 4 5
3 1
样例输出
3
提示
样例中2,3,4都满足条件,故答案为3

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

#include <stdio.h>
#include <stdlib.h>

int countNumbersInRange(int arr[], int n, int m, int x) {
    int count = 0;

    for (int i = 0; i < n; i++) {
        // 计算当前数与指定数字m的差值的绝对值
        int diff = abs(arr[i] - m);

        // 如果差值小于等于误差范围x,则增加计数
        if (diff <= x) {
            count++;
        }
    }

    return count;
}

int main() {
    int n;
    scanf("%d", &n);

    int arr[100];
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    int m, x;
    scanf("%d %d", &m, &x);

    int result = countNumbersInRange(arr, n, m, x);
    printf("%d\n", result);

    return 0;
}

你可以将上述代码保存为一个名为 “count.c” 的文件,并使用C编译器进行编译和运行。在输入整数序列的长度、整数序列、指定的整数m以及误差范围x后,程序将计算出与指定数字m误差范围小于等于x的数的个数,并进行输出。

在主函数中,我们首先读取整数序列的长度 n。然后,定义一个整数数组 arr 用于存储整数序列。

接下来,我们使用一个循环来读取整数序列的每个数,并将其存储在 arr 数组中。

然后,我们读取指定的整数m和误差范围x。

接着,我们调用 countNumbersInRange 函数来计算满足条件的数的个数。该函数使用一个循环遍历整数序列中的每个数,并计算当前数与指定数字m的差值的绝对值。如果差值小于等于误差范围x,则增加计数。

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

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

第2题:全在其中

你设计了一个新的加密技术,可以用一种聪明的方式在一个字符串的字符间插入随机的字符串从而对信息进行编码。由于专利问题,我们将不会详细讨论如何在原有信息中产生和插入字符串。不过,为了验证你的方法,有必要写一个程序来验证原来的信息是否全在最后的字符串之中。
给定两个字符串s和t,你需要判断s是否是t的“子列”。也就是说,如果你去掉t中的某些字符,剩下字符将连接而成为s。
时间限制:1000
内存限制:65536
输入
输入包括多个测试样例。每一个都是由空格分隔的由字母数字ASCII字符组成的两个特定的字符串s和t。s和t的长度不超过100000
输出
对于每个测试样例,如果s是t的“子列”,则输出”Yes”,否则输出”No”
样例输入
sequence subsequence
person compression
VERDI
vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter
样例输出
Yes
No
Yes
No

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

#include <stdio.h>
#include <string.h>

int isSubsequence(char s[], char t[]) {
    int len_s = strlen(s);
    int len_t = strlen(t);

    int i = 0, j = 0;
    while (i < len_s && j < len_t) {
        if (s[i] == t[j]) {
            i++;
        }
        j++;
    }

    if (i == len_s) {
        return 1; // s是t的子列
    } else {
        return 0; // s不是t的子列
    }
}

int main() {
    char s[100001];
    char t[100001];

    while (scanf("%s %s", s, t) != EOF) {
        int result = isSubsequence(s, t);

        if (result == 1) {
            printf("Yes\n");
        } else {
            printf("No\n");
        }
    }

    return 0;
}

你可以将上述代码保存为一个名为 “subsequence.c” 的文件,并使用C编译器进行编译和运行。在输入每个测试样例的字符串s和t后,程序将判断s是否是t的子列,并进行输出。

在主函数中,我们使用一个循环来读取每个测试样例的字符串s和t。scanf("%s %s", s, t) 用于读取两个字符串,并将它们分别存储在字符数组 st 中。

接下来,我们调用 isSubsequence 函数来判断s是否是t的子列。该函数使用两个指针 ij 来遍历字符串s和t,同时比较字符是否相等。如果字符相等,则将 i 指针向前移动,否则将 j 指针向前移动。最后,如果 i 的值等于s的长度,即 i == len_s,则说明s是t的子列。

最后,根据 isSubsequence 函数的返回值,我们输出 “Yes” 或 “No”。

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

第3题:Lab杯

“Lab杯”乒乓球赛就要在PKU的实验室之间举行了。人工智能实验室的学生都是乒乓球的狂热分子,都强烈希望代表实验室去比赛。但是由于名额限制,他们之中只能由一个人被选作代表。
为了让选择的过程公平,他们决定打一次单循环赛,每一对学生之间都打一场五局三胜的比赛。赢得最多比赛的人就将代表实验室去比赛。现在Ava手里有一份表,表里面记录了每一场比赛的比分。她应该让谁去比赛?
时间限制:5000
内存限制:131072
输入
输入包含一组测试数据。第一行包含n(2 ≤ n ≤ 100),实验室里学生的数目。接下来给出一个n × n矩阵A。矩阵的每一个元素都是0、1、2、3中的一个。第i行第j列的元素aij是第i个学生在和第j个学生的比赛中赢的局数。aij和aji(i ≠ j)正好有一个是3,另外一个小于3。矩阵的所有对角线元素都是0。
输出
输出赢了最多比赛的学生的编号。如果有平分,选择编号最小的。
样例输入
4
0 0 3 2
3 0 3 1
2 2 0 2
3 3 3 0
样例输出
4

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

#include <stdio.h>

int findLabCupWinner(int n, int A[][100]) {
    int winner = 1; // 假设第一个学生为赢家

    for (int i = 2; i <= n; i++) {
        int wins = 0; // 记录当前学生赢得的比赛局数

        for (int j = 1; j <= n; j++) {
            if (A[i][j] == 3) {
                wins++;
            }
        }

        if (wins > A[winner][1]) {
            winner = i; // 更新赢家编号
        } else if (wins == A[winner][1] && i < winner) {
            winner = i; // 若局数相同,选择编号最小的学生作为赢家
        }
    }

    return winner;
}

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        int A[100][100];

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                scanf("%d", &A[i][j]);
            }
        }

        int winner = findLabCupWinner(n, A);
        printf("%d\n", winner);
    }

    return 0;
}

你可以将上述代码保存为一个名为 “lab_cup.c” 的文件,并使用C编译器进行编译和运行。在输入实验室学生的数目n以及比赛比分矩阵A后,程序将确定赢得最多比赛的学生的编号,并进行输出。

在主函数中,我们使用一个循环来读取每组测试数据。scanf("%d", &n) 用于读取实验室学生的数目n。然后,我们定义一个二维数组 A 来存储比赛比分矩阵。

接下来,我们使用两个嵌套的循环来读取比赛比分矩阵A的每个元素。

然后,我们调用 findLabCupWinner 函数来确定赢得最多比赛的学生的编号。该函数使用两个循环来遍历比赛比分矩阵A,并计算每个学生赢得的比赛局数。如果某个学生的局数大于当前最多局数的学生,或者局数相等但学生编号较小,则更新赢家编号。

最后,我们输出赢家编号。

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

第4题:有趣的跳跃

一个长度为n(n>0)的序列中存在“有趣的跳跃”当且仅当相邻元素的差的绝对值经过排序后正好是从1到(n-1)。例如,1 4 2 3存在“有趣的跳跃”,因为差的绝对值分别为3,2,1。当然,任何只包含单个元素的序列一定存在“有趣的跳跃”。你需要写一个程序判定给定序列是否存在“有趣的跳跃”。
时间限制:1000
内存限制:65536
输入
一行,第一个数是n(0 < n < 3000),为序列长度,接下来有n个整数,依次为序列中各元素,各元素的绝对值均不超过1,000,000,000
输出
一行,若该序列存在“有趣的跳跃”,输出"Jolly",否则输出"Not jolly"
样例输入
4 1 4 2 3
样例输出
Jolly

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

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

bool isJolly(int n, int arr[]) {
    bool diff[n-1]; // 用于记录差的绝对值是否出现过
    for (int i = 0; i < n-1; i++) {
        diff[i] = false;
    }

    for (int i = 1; i < n; i++) {
        int absoluteDiff = abs(arr[i] - arr[i-1]);

        if (absoluteDiff < 1 || absoluteDiff >= n || diff[absoluteDiff-1]) {
            return false; // 差的绝对值不在1到(n-1)范围内或者重复出现
        }

        diff[absoluteDiff-1] = true;
    }

    return true;
}

int main() {
    int n;
    scanf("%d", &n);

    int arr[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    bool result = isJolly(n, arr);

    if (result) {
        printf("Jolly\n");
    } else {
        printf("Not jolly\n");
    }

    return 0;
}

你可以将上述代码保存为一个名为 “jolly_jump.c” 的文件,并使用C编译器进行编译和运行。在输入序列的长度n以及序列的元素后,程序将判断该序列是否存在"有趣的跳跃",并进行输出。

在主函数中,我们首先读取序列的长度n,并定义一个整数数组 arr 来存储序列的元素。

接下来,我们使用一个循环来读取序列的元素,并将它们存储在数组 arr 中。

然后,我们调用 isJolly 函数来判断序列是否存在"有趣的跳跃"。该函数使用一个布尔数组 diff 来记录差的绝对值是否出现过。我们首先将 diff 数组中的所有元素初始化为 false

接下来,我们使用一个循环遍历序列中的相邻元素,并计算它们的差的绝对值。如果差的绝对值不在1到(n-1)范围内,或者差的绝对值重复出现,则说明序列不存在"有趣的跳跃",返回 false

如果序列中的所有差的绝对值都在1到(n-1)范围内且没有重复出现,则返回 true

最后,根据 isJolly 函数的返回值,我们输出 “Jolly” 或 “Not jolly”。

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

第5题:反反复复

Mo和Larry发明了一种信息加密方法。他们首先决定好列数,然后将信息(只包含字母)从上往下依次填入各列,并在末尾补充一些随机字母使其成为一个完整的字母矩阵。例如,若信息是“There’s no place like home on a snowy night”并且有5列,Mo会写成:
t o i o y
h p k n n
e l e a i
r a h s g
e c o n h
s e m o t
n l e w x
注意Mo只会填入字母,且全部是小写形式。在这个例子中,Mo用字母“x”填充了信息使之成为一个完整的矩阵,当然他使用任何字母都是可以的。
Mo根据这个矩阵重写信息:首先从左到右写下第一行,然后从右到左写下第二行,再从左到右写下第三行……以此左右交替地从上到下写下各行字母,形成新的字符串。这样,例子中的信息就被加密为:toioynnkpheleaigshareconhtomesnlewx。
你的工作是帮助Larry从加密后的信息中还原出原始信息(包括填充的字母)。
时间限制:1000
内存限制:65536
输入
第一行包含一个整数(范围2到20),表示使用的列数。 第二行是一个长度不超过200的字符串。
输出
一行,即原始信息。
样例输入
5
toioynnkpheleaigshareconhtomesnlewx
样例输出
theresnoplacelikehomeonasnowynightx

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

#include <stdio.h>
#include <string.h>

void decryptMessage(int cols, char message[]) {
    int len = strlen(message);
    int rows = len / cols;
    int extra = len % cols;
    int lettersInRow[cols];

    int row = 0, col = 0;
    int index = 0;
    int direction = 1; // 1表示从左到右,-1表示从右到左

    for (int i = 0; i < cols; i++) {
        lettersInRow[i] = (i < extra) ? (rows + 1) : rows;
    }

    while (index < len) {
        if (row == rows) {
            direction = -1; // 到达最后一行后改变方向
        } else if (row == 0) {
            direction = 1; // 到达第一行后改变方向
        }

        if (message[index] == 'x') {
            message[index] = 'a'; // 将填充的字母替换为'a'
        }

        index++;
        lettersInRow[col]--;

        if (direction == 1) {
            row++;
        } else {
            row--;
        }

        col += direction;
    }
}

int main() {
    int cols;
    scanf("%d", &cols);

    char message[201];
    scanf("%s", message);

    decryptMessage(cols, message);

    printf("%s\n", message);

    return 0;
}

你可以将上述代码保存为一个名为 “decrypt_message.c” 的文件,并使用C编译器进行编译和运行。在输入列数cols以及加密后的信息message后,程序将还原出原始信息,并进行输出。

在主函数中,我们首先读取列数cols,并定义一个字符数组 message 来存储加密后的信息。

接下来,我们调用 decryptMessage 函数来还原原始信息。该函数首先计算行数rows和剩余的额外字母数extra。然后,我们使用一个循环来初始化每行的字母数 lettersInRow 数组。

接下来,我们使用两个变量 rowcol 来追踪当前位置。我们使用一个变量 index 来遍历加密后的信息。我们还使用一个变量 direction 来指示当前行的写入方向,1表示从左到右,-1表示从右到左。

在循环中,我们首先检查是否到达最后一行或第一行,需要改变方向。然后,我们检查当前字母是否为填充字母"x",如果是,则将其替换为"a"。

接下来,我们更新 indexlettersInRow[col]rowcol 的值,根据方向和当前位置的移动。

最后,我们输出还原后的原始信息。

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

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

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

相关文章

在C中使用Socket实现多线程异步TCP消息发送

目录 基础知识开始实现主要函数说明结束语 在本篇文章中&#xff0c;我们会探讨如何在C语言中使用socket来实现多线程&#xff0c;异步发送TCP消息的系统。虽然C标准库并没有原生支持异步和多线程编程&#xff0c;但是我们可以结合使用POSIX线程&#xff08;pthread&#xff09…

React2023电商项目实战 - 1.项目搭建

古人学问无遗力&#xff0c;少壮工夫老始成。 纸上得来终觉浅&#xff0c;绝知此事要躬行。 —— 陆游《《冬夜读书示子聿》》 系列文章目录 项目搭建App登录及网关App文章自媒体平台&#xff08;博主后台&#xff09;内容审核(自动) 文章目录 系列文章目录一、项目介绍1.页面…

二维码网络钓鱼攻击泛滥!美国著名能源企业成主要攻击目标

近日&#xff0c;Cofense发现了一次专门针对美国能源公司的网络钓鱼攻击活动&#xff0c;攻击者利用二维码将恶意电子邮件塞进收件箱并绕过安全系统。 Cofense 方面表示&#xff0c;这是首次发现网络钓鱼行为者如此大规模的使用二维码进行钓鱼攻击&#xff0c;这表明他们可能正…

云计算——ACA学习 云计算核心技术

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 写在前面 本系列将会持续更新云计算阿里云ACA的学习&#xff0c;了解云计算及网络安全相关…

使用 AI 将绘画和照片转换为动画

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑器的3D应用场景 华盛顿大学和Facebook的研究人员最近发表了一篇论文&#xff0c;展示了一种基于深度学习的系统&#xff0c;可以将静止图像和绘画转换为动画。称为照片唤醒的算法使用卷积神经网络从单个静止图像以 …

性能分析之MySQL慢查询日志分析(慢查询日志)

一、背景 MySQL的慢查询日志是MySQL提供的一种日志记录,他用来记录在MySQL中响应的时间超过阈值的语句,具体指运行时间超过long_query_time(默认是10秒)值的SQL,会被记录到慢查询日志中。 慢查询日志一般用于性能分析时开启,收集慢SQL然后通过explain进行全面分析,一…

【STM32】FreeRTOS事件组学习

事件组&#xff08;Event Group&#xff09; 一个任务执行之前需要经过多个条件进行判断&#xff0c;当条件全部满足或多个条件中的某一个条件满足才执行。 实验&#xff1a;创建两个任务&#xff0c;一个事件组&#xff0c;当按键一二三都按过一遍才打印。 实现&#xff1a…

【论文阅读】SHADEWATCHER:使用系统审计记录的推荐引导网络威胁分析(SP-2022)

SHADEWATCHER: Recommendation-guided CyberThreat Analysis using System Audit Records S&P-2022 新加坡国立大学、中国科学技术大学 Zengy J, Wang X, Liu J, et al. Shadewatcher: Recommendation-guided cyber threat analysis using system audit records[C]//2022 I…

python3 0学习笔记之基本知识

0基础学习笔记之基础知识 &#x1f4da; 基础内容1. 条件语句 if - elif - else2. 错误铺捉try - except(一种保险策略&#xff09;3. 四种开发模式4. 函数&#xff1a;def用来定义函数的5. 最大值最小值函数&#xff0c;max &#xff0c;min6. is 严格的相等&#xff0c;is no…

【Linux命令详解 | gzip命令】 gzip命令用于压缩文件,可以显著减小文件大小

文章标题 简介一&#xff0c;参数列表二&#xff0c;使用介绍1. 基本压缩和解压2. 压缩目录3. 查看压缩文件内容4. 测试压缩文件的完整性5. 强制压缩6. 压缩级别7. 与其他命令结合使用8. 压缩多个文件9. 自动删除原文件 总结 简介 在Linux中&#xff0c;gzip命令是一款强大的文…

使用grep做文本的过滤

常与 管道符&#xff08;|&#xff09;结合在一起使用 管道符 piping&#xff1a;用于前一个命令的输出当作后一个命令的输入。常用于连接多个命令 ┌──(root㉿kali)-[~/work/exam] └─# ps aux | grep apache2 root 41946 0.0 0.2 6568 2304 pts/1 S 17:26…

怎么对mp4视频进行压缩?分享了几个不错的方法

怎么对mp4视频进行压缩&#xff1f;这个问题非常重要。确实&#xff0c;MP4视频文件由于包含音频和图像&#xff0c;通常会占据较大的存储空间。如果我们在手机或电脑上保存过多的MP4视频文件&#xff0c;随着时间的积累&#xff0c;会导致存储容量不足的问题。另外&#xff0c…

用cpolar生成的公网地址,对位于本地的Cloudreve网盘进行访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

段错误核心转储

在linux下运行可执行文件的时候出现了以下错误&#xff1a; error:segmentation fault core dumped解决方法&#xff1a; #查看core文件大小判断是否可写 $ ulimit -a real-time non-blocking time (microseconds, -R) unlimited core file size (blocks, -c) …

教学实训平台,新增批量设置作业小组|ModelWhale 版本更新

始惊三伏尽&#xff0c;又遇立秋时。季节更迭、岁月匆匆&#xff0c;ModelWhale 又迎来了新一轮的版本更新。 本次更新中&#xff0c;ModelWhale 主要进行了以下功能迭代&#xff1a; • 新增 批量设置作业小组&#xff08;团队版✓ &#xff09; • 新增 断网时支持连接数据…

opencv-python视频实时识别二维码

代码如下&#xff1a; import numpy as np import cv2 as cv import globcap cv.VideoCapture(0) if not cap.isOpened():print("Cannot open camera")exit() while True:# Capture frame-by-frameret, frame cap.read()# if frame is read correctly ret is True…

3D产品配置器简介【电商】

3D 配置器对整个电子商务业务有良好影响&#xff0c;本文将介绍如何实现&#xff0c;并且涵盖了 3D 产品配置器的重要方面以及一些最常见的问题。 在电子商务营销中采用 3D 技术已显示出更高的客户参与度。 这进一步表明消费者喜欢访问可以为他们提供个性化购物体验的在线商店…

AI智能语音机器人的基本业务流程

先画个图&#xff0c;了解下AI语音机器人的基本业务流程。 上图是一个AI语音机器人的业务流程&#xff0c;简单来说就是首先要配置话术&#xff0c;就是告诉机器人在遇到问题该怎么回答&#xff0c;这个不同公司不同行业的差别比较大&#xff0c;所以一般每个客户都会配置其个性…

低代码如何提效开发者?

低代码如何提效开发者&#xff1f; 一、低代码的出现 二、低代码解决方案的主要特点 三、优秀强大的软件开发工具 四、你所在企业为什么要关心低代码开发&#xff1f; 一、低代码的出现 无论你是一个初级的开发者还是一位经验丰富的专家&#xff0c;低代码都将为你提供了一个突…

华为OD机试 - BOSS的收入 - 回溯(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…