2020 年 12 月青少年软编等考 C 语言二级真题解析

目录

  • T1. 数组指定部分逆序重放
    • 思路分析
  • T2. 简单密码
    • 思路分析
  • T3. 错误探测
    • 思路分析
  • T4. 奇数单增序列
    • 思路分析
  • T5. 话题焦点人物
    • 思路分析

T1. 数组指定部分逆序重放

将一个数组中的前 k k k 项按逆序重新存放。例如,将数组 8 , 6 , 5 , 4 , 1 8,6,5,4,1 8,6,5,4,1 3 3 3 项逆序重放得到 5 , 6 , 8 , 4 , 1 5,6,8,4,1 5,6,8,4,1

时间限制:1 s
内存限制:64 MB

  • 输入
    输入为两行:
    第一行两个整数,以空格分隔,分别为数组元素的个数 n n n 1 < n < 100 1 < n < 100 1<n<100,以及指定的 k k k 1 ≤ k ≤ n 1 \le k \le n 1kn
    第二行是 n n n 个整数,每两个整数之间用空格分隔。
  • 输出
    输出为一行:输出按题目要求逆序后数组的整数,每两个整数之间用空格分隔。
  • 样例输入
    5 3
    8 6 5 4 1
    
  • 样例输出
    5 6 8 4 1
    

思路分析

此题考查一维数组的基本应用,属于入门题。

可以使用循环遍历数组下标 1 ∼ k / 2 1\sim k/2 1k/2 的范围,在循环体内执行 swap(a[i], a[k+1-i]); 即可实现前 k k k 项逆序重放。也可以使用 reverse 函数,更加方便简单。

/** Name: T1.cpp* Problem: 数组指定部分逆序重放* Author: Teacher Gao.* Date&Time: 2024/05/23 19:24*/#include <iostream>
#include <algorithm>using namespace std;int main()
{int n, k;int a[105];cin >> n >> k;for (int i = 1; i <= n; i++) {cin >> a[i];}reverse(a + 1, a + k + 1);for (int i = 1; i <= n; i++) {cout << a[i] << " ";}return 0;
}

T2. 简单密码

Julius Caesar \text{Julius Caesar} Julius Caesar 曾经使用过一种很简单的密码。对于明文中的每个字符,将它用它字母表中后 5 5 5 位对应的字符来代替,这样就得到了密文。比如字符 A A A F F F 来代替。如下是密文和明文中字符的对应关系。

密文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
明文:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U

你的任务是对给定的密文进行解密得到明文。你需要注意的是,密文中出现的字母都是大写字母。密文中也包括非字母的字符,对这些字符不用进行解码。

时间限制:1 s
内存限制:64 MB

  • 输入
    一行,给出密文,密文不为空,而且其中的字符数不超过 200 200 200
  • 输出
    输出一行,即密文对应的明文。
  • 样例输入
    NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
    
  • 样例输出
    IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
    

思路分析

此题考查字符串的基本操作,属于入门题。

可以建立两个数组 ab,用于构建密文和明文之间的对应关系。然后遍历密文字符串 str,对于每一个 str[i],在密文数组 a 中进行检测。若匹配成功,则将 str[i] 修改为对应的明文。最后输出 str 即可。此为循环嵌套的写法,容易想得到,但是代码长。

仔细观察密文和明文的对应关系不难发现,这个对应关系是一个循环移位的操作, F ∼ Z F \sim Z FZ 分别减去 5 5 5 即可得到对应明文,至于 A ∼ E A \sim E AE,可以减去 5 5 5 之后再加上 26 26 26 得到对应明文。此为单层循环的写法,程序效率得到了很大的提升。

/** Name: T2.cpp* Problem: 简单密码* Author: Teacher Gao.* Date&Time: 2024/05/23 19:37*/#include <iostream>
#include <string>using namespace std;int main()
{string str;getline(cin, str);int len = str.size();for (int i = 0; i < len; i++) {if ('A' <= str[i] && str[i] <= 'Z') {str[i] = str[i] - 5;if (str[i] < 'A') {str[i] = str[i] + 26;}}}cout << str << endl;return 0;
}

T3. 错误探测

给定 n × n n \times n n×n 0 0 0 1 1 1 组成的矩阵,如果矩阵的每一行和每一列的 1 1 1 的数量都是偶数,则认为符合条件。

你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。“改变矩阵元素” 的操作定义为 0 0 0 变成 1 1 1 或者 1 1 1 变成 0 0 0

时间限制:1 s
内存限制:64 MB

  • 输入
    输入 n + 1 n + 1 n+1 行:
    1 1 1 行为矩阵的大小 n n n 0 < n < 100 0 < n < 100 0<n<100
    以下 n n n 行为矩阵的每一行的元素,元素之间以一个空格分开。
  • 输出
    如果矩阵符合条件,则输出 OK;如果矩阵仅改变一个矩阵元素就能符合条件,则输出需要改变的元素所在的行号和列号,以一个空格分开。如果不符合以上两条,输出 Corrupt
  • 样例输入 1
    4
    1 0 1 0
    0 0 0 0
    1 1 1 1
    0 1 0 1
    
  • 样例输出 1
    OK
    
  • 样例输入 2
    4
    1 0 1 0
    0 0 1 0
    1 1 1 1
    0 1 0 1
    
  • 样例输出 2
    2 3
    
  • 样例输入 3
    4
    1 0 1 0
    0 1 1 0
    1 1 1 1
    0 1 0 1
    
  • 样例输出 3
    Corrupt
    

思路分析

此题考察二维数组的用法,属于入门题。

对输入数据分别按行和列统计 1 1 1 的个数,并分别记录下 1 1 1 的个数为奇数个的行数 totr 和行号 row、列数 totc 和列号 col。若行数 totr 或列数 totc 大于 1 1 1,则不可行;若行数 totr 和列数 totc 均等于 1 1 1,则修改行号 row 和列号 col 的交叉位置即可;若行数 totr 和列数 totc 均等于 0 0 0,则符合条件。

事实上我们可以使用两个一维数组来替代二维数组,换言之,只需统计,无需存储。甚至更进一步,可以只用一个一维数组来统计每列 1 1 1 的个数。因为程序是按行进行输入的,每行的情况可以在输入的过程中就进行统计求解。

/** Name: T3.cpp* Problem: 错误探测* Author: Teacher Gao.* Date&Time: 2024/05/23 19:54*/#include <iostream>using namespace std;int main()
{int n, x;int row[105] = {0}, col[105] = {0};cin >> n;for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {cin >> x;row[i] = row[i] + x;	// 按行统计col[j] = col[j] + x;	// 按列统计}}// 按行查找int totr = 0, rowi;for (int i = 1; i <= n; i++) {if (row[i] % 2) {totr++;rowi = i;}}// 按列查找int totc = 0, coli;for (int i = 1; i <= n; i++) {if (col[i] % 2) {totc++;coli = i;}}// 检测结果if (totr > 1 || totc > 1) {cout << "Corrupt" << endl;}else if (totr == 1 && totc == 1) {cout << rowi << " " << coli << endl;}else {cout << "OK" << endl;}return 0;
}

T4. 奇数单增序列

给定一个长度为 n ( ≤ 500 ) n(\le 500) n(500) 的正整数序列,请将其中的所有奇数取出,并按升序输出。

时间限制:1 s
内存限制:64 MB

  • 输入
    2 2 2 行:
    1 1 1 行为 n n n
    2 2 2 行为 n n n 个正整数,其间用空格间隔。
  • 输出
    增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。
  • 样例输入
    10
    1 3 2 6 5 4 9 8 7 10
    
  • 样例输出
    1,3,5,7,9
    

思路分析

此题考察排序算法,属于入门算法题。

由于数据量较小, O ( n 2 ) O(n^2) O(n2) 的排序算法(冒泡、选择、插入)均可以解决此题。当然了,更简单的方法是用 sort 函数。排完序之后将奇数进行输出即可。至于输出格式中的逗号,可以参考 2022 年 6 月青少年软编等考 C 语言一级真题解析的 T5。

/** Name: T4.cpp* Problem: 奇数单增序列* Author: Teacher Gao.* Date&Time: 2024/05/23 20:10*/#include <iostream>
#include <algorithm>using namespace std;int main()
{int n, a[505];cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];}sort(a + 1, a + n + 1);bool flag = 1;for (int i = 1; i <= n; i++) {if (a[i] % 2) {if (flag) {flag = 0;}else {cout << ",";}cout << i;}}return 0;
}

T5. 话题焦点人物

微博提供了一种便捷的交流平台。一条微博中,可以提及其它用户。例如 Lee \text{Lee} Lee 发出一条微博为:“期末考试顺利 @ Kim \text{Kim} Kim @ Neo \text{Neo} Neo”,则 Lee \text{Lee} Lee 提及了 Kim \text{Kim} Kim Neo \text{Neo} Neo 两位用户。

我们收集了 n ( 1 < n < 10000 ) n(1 < n < 10000) n(1<n<10000) 条微博,并已将其中的用户名提取出来,用小于等于 100 100 100 的正整数表示。

通过分析这些数据,我们希望发现大家的话题焦点人物,即被提及最多的人(题目保证这样的人有且只有一个),并找出那些提及它的人。

时间限制:1 s
内存限制:64 MB

  • 输入
    输入共两部分:
    第一部分是微博数量 n n n 1 < n < 10000 1 < n < 10000 1<n<10000
    第二部分是 n n n 条微博,每条微博占一行,表示为:发送者序号 a a a,提及人数 k k k 0 ≤ k ≤ 20 0 \le k \le 20 0k20,然后是 k k k 个被提及者序号 b 1 , b 2 . . . b k b_1,b_2...b_k b1,b2...bk;其中 a a a b 1 , b 2 . . . b k b_1,b_2...b_k b1,b2...bk 均为大于 0 0 0 小于等于 100 100 100 的整数。相邻两个整数之间用单个空格分隔。
  • 输出
    输出分两行:
    第一行是被提及最多的人的序号;
    第二行是提及它的人的序号,从小到大输出,相邻两个数之间用单个空格分隔。同一个序号只输出一次。
  • 样例输入
    5
    1 2 3 4
    1 0
    90 3 1 2 4
    4 2 3 2
    2 1 3
    
  • 样例输出
    3
    1 2 4
    

思路分析

此题考察二维数组的应用,有一定难度,找对方法之后则可以轻松拿下。

乍一看,此题考查的是数组的查找与统计,但是看到第二问就比较麻烦了,多数同学会选择采用循环嵌套的方式进行查找,不仅代码复杂,而且效率不高。结合一下,我们可以用 vector 解决这个麻烦的问题,将提到 i i i 号用户的用户,存储到一个 vector 中。之后对多个 vectorsize 求出最大值,则最大值对应的那个 vector 的下标就是话题焦点人物。再将这个 vector 进行排序输出即可。

/** Name: T5.cpp* Problem: 话题焦点人物* Author: Teacher Gao.* Date&Time: 2024/05/23 20:18*/#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main()
{int n, a, k, x;vector<int> L[105];cin >> n;for (int i = 1; i <= n; i++) {cin >> a >> k;for (int j = 1; j <= k; j++) {cin >> x;L[x].push_back(a);		// a 提到了 x,因此将 a 存入 x 对应的 vector}}int ans = 0;for (int i = 1; i <= 100; i++) {if (L[i].size() > ans) {ans = L[i].size();}}sort(L[ans].begin(), L[ans].end());cout << ans << endl;for (auto i : L[ans]) {cout << i << " ";}return 0;
}

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

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

相关文章

Java开发之JDBC

JDBC 介绍JDBC程序&#xff08;Statement&#xff09;相关细节URLResultSet 连接池程序&#xff08;PreparedStatement&#xff09; 本文主要记录一下学习JDBC的一些知识点 介绍JDBC 首先谈谈什么是JDBC。下面放几张图&#xff0c;大致就可以清楚JDBC了。程序&#xff08;Sta…

网络编程—— Http的Get请求

http: hyper text transport protocal:超文本传输协议。 http是一种基于客户端-服务器模式的协议(Client-Server)。它规定只能由客户端先发起请求给服务器&#xff0c; 服务器做出响应。 http数据传输以数据报文的形式进行&#xff0c; 客户端向服务器发起的请求叫做请求报文。…

HunyuanDiT

1、依赖关系和安装 首先克隆存储库&#xff1a; git clone https://github.com/tencent/HunyuanDiT cd HunyuanDiT unzip HunyuanDiT-main.zip 2、一个environment.yml用于设置 Conda 环境的文件一个environment.yml用于设置 Conda 环境的文件 conda create -n hunyuandit py…

centos7 redis开机启动

[rootlocalhost system]# vim /etc/systemd/system/redis.service 版本是5.0 /usr/local/redis 是redis安装目录 [Unit] DescriptionRedis.server # 指定服务所依赖的其他单元&#xff08;如网络服务&#xff09;。这确保在启动该服务之前&#xff0c;所需的其他单元已经启动…

C++语法|虚函数与多态详细讲解(七)|理解抽象类?(面试向)

系列汇总讲解&#xff0c;请移步&#xff1a; C语法&#xff5c;虚函数与多态详细讲解系列&#xff08;包含多重继承内容&#xff09; 主要是两个问题&#xff1a; 抽象类和普通类有什么区别&#xff1f;一般把什么类处理处理成抽象类 在这里&#xff0c;案例我们仍然沿用上篇…

【Linux玩物志】Linux环境开发基本工具使用(终章) ——git与gdb调试器

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a;这是最后一篇Linux工具篇&#xff0c;今天这篇文章我们要来简单讲一件git与调试器gdb。 目录 使用 git 命令行 安装 git 在 Github 创建项目 注册账号 创建项目 ​编辑 下载项目到本地 在 Gite…

leetcode397周赛场

第一题&#xff1a;两个字符串的排列差 给你两个字符串 s 和 t&#xff0c;每个字符串中的字符都不重复&#xff0c;且 t 是 s 的一个排列。 排列差 定义为 s 和 t 中每个字符在两个字符串中位置的绝对差值之和。 返回 s 和 t 之间的 排列差 。 示例 1&#xff1a; 输入&am…

解决push时,报错error_ failed to push some refs to ‘https___gitee.com_...‘

remote: error: File: 90c5365492dea3b3c855b2375f1de8588ac1bda4 162.65 MB, exceeds 100.00 MB. 原因是上传的文件超过100.00 MB Gitee限制上传的每个文件的大小&#xff0c;不能超过100MB 高于100MB无法上传到Gitee远程仓库&#xff0c;把超过大小的文件添加到Git忽略提交规…

融合基因组序列识别scATAC-seq的细胞类型

利用scATAC-seq技术进行单细胞分析&#xff0c;可以在单细胞分辨率下深入了解基因调控和表观遗传异质性&#xff0c;但由于数据的高维性和极端稀疏性&#xff0c;scATAC-seq的细胞注释仍然具有挑战性。现有的细胞注释方法大多集中在细胞峰矩阵上&#xff0c;没有充分利用潜在的…

【Flutter】 webview请求权限问题

需求&#xff1a;webview可以通过录音后语音转文字。 使用插件&#xff1a; permission_handler: ^11.0.1 webview_flutter: ^4.7.0 代码如下&#xff1a; 1.添加权限 添加安卓的权限&#xff1a; android/app/src/main/AndroidManifest.xml <uses-permission android…

vue使用EventBus进行跨组件通信

Vue中的EventBus&#xff0c;又称为事件总线&#xff0c;是一种常用的通信模式&#xff0c;它允许在Vue应用程序的不同组件之间进行松耦合的通信&#xff0c;尤其是对于那些没有直接父子关系的组件间的通信非常有用。EventBus基于Vue的自定义事件系统实现&#xff0c;工作原理遵…

商品指数创年内新高,粘性通胀成为美联储噩梦

文章概述 虽然美国4月CPI增幅放缓让美联储今年降息的可能性大增&#xff0c;但与此同时&#xff0c;大宗商品价格却达到了一年来的最高水平&#xff0c;粘性通胀可能成为美联储的噩梦。数据显示&#xff0c;跟踪24种能源、金属和农业合约彭博大宗商品现货指数今年以来已经上涨…

【ARM 嵌入式 C 入门及渐进 6.3 -- C 函数嵌入多条汇编语句 】

请阅读【嵌入式开发学习必备专栏】 文章目录 C 函数嵌入多条汇编语句C 函数嵌入多条汇编语句 在C代码中嵌入多条ARMv8汇编语句,可以通过将这些汇编指令放置在一个asm块内来实现。使用GCC的内嵌汇编语法,你可以顺序地编写多个指令,并根据需要指定输入、输出和被破坏(clobbe…

【APM】在Kubernetes中,使用Helm安装Prometheus Server 0.73.2(开启远程写入功能)

1、Prometheus 简介 Prometheus 是一款开源的监控和警报系统,起源于 SoundCloud 并在2012年开始被广泛采用。它在2016年成为 Cloud Native Computing Foundation (CNCF) 的成员项目,与 Kubernetes 齐名,是云原生计算领域的重要组成部分。Prometheus 以其强大的灵活性、易用…

训练的过程中内存一直增加的问题

可能的原因一&#xff1a; 解决pytorch训练的过程中内存一直增加的问题_pytorch训练过程中,内存一直增长-CSDN博客 可能的原因二&#xff1a; DataLoader num_workers > 0 causes CPU memory from parent process to be replicated in all worker processes Issue #13246…

DAY2 NETWORK

① 什么是IP地址 IP地址&#xff1a;是计算机在网络中唯一的标识&#xff0c;由两部分组成 分别是表示网络区域的网络号&#xff0c;和该网络下的主机编号 网络号&#xff1a;确定计算机所从属于哪个局域网络 主机号&#xff1a;计算机在该局域网络下的一个编号 ② IP的划分…

使用Flask ORM进行数据库操作的技术指南

文章目录 安装Flask SQLAlchemy配置数据库连接创建模型类数据库操作插入数据查询数据更新数据删除数据 总结 Flask是一个轻量级的Python Web框架&#xff0c;其灵活性和易用性使其成为开发人员喜爱的选择。而ORM&#xff08;对象关系映射&#xff09;则是一种将数据库中的表与面…

LeetCode题练习与总结:二叉树的最大深度--104

一、题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root […

ESP32开发环境搭建Windows VSCode集成Espressif IDF插件开发环境搭建 IDF_V5.2.1

一、安装Visual Studio Code 下载地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 打开上方链接&#xff0c;选择页面中的Windows版本&#xff0c;单击下载 将下载好的VSCodeUserSetup-x64-1.89.1.exe。单击右键&#xff0c;选择以管理员身份运行&#xf…

雪花算法 代码

/*** author lwh* date 2023/9/5* description 批量插入&#xff0c;手动设置**/ public class IdWorker {//因为二进制里第一个 bit 为如果是 1&#xff0c;那么都是负数&#xff0c;但是我们生成的 id 都是正数&#xff0c;所以第一个 bit 统一都是 0。//机器ID 2进制5位 3…