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

news2024/10/4 4:28:20

目录

  • T1. 统计指定范围里的数
    • 思路分析
  • T2. 按照个位数排序
    • 思路分析
  • T3. 过滤多余的空格
    • 思路分析
  • T4. 图像叠加
    • 思路分析
  • T5. 出书最多
    • 思路分析

T1. 统计指定范围里的数

给定一个数的序列 S S S,以及一个区间 [ L , R ] [L, R] [L,R],求序列中介于该区间的数的个数,即序列中大于等于 L L L 且小于等于 R R R 的数的个数。

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

  • 输入
    第一行 1 1 1 个整数 n n n,表示序列的长度。 0 < n ≤ 10000 0 < n ≤ 10000 0<n10000
    第二行 n n n 个正整数,表示序列里的每一个数,每个数小于等于 10000000 10000000 10000000
    第三行 2 2 2 个整数 L L L R R R,分别表示区间的左端点,区间的右端点。 1 ≤ L ≤ R ≤ 1000000 1 ≤ L ≤ R ≤ 1000000 1LR1000000
  • 输出
    输出一个整数,表示序列中大于等于 L L L 且小于等于 R R R 的数的个数。
  • 样例输入
    5
    11 8 1 10 16
    1 10
    
  • 样例输出
    3
    

思路分析

此题考查一维数组的查找与统计,属于入门题。

将给定数据存储在数组中之后,依次遍历每一个元素,检测其是否在指定范围 L L L R R R 之内,若是,则计数器变量累加 1 1 1,最后输出计数器变量的值即可。

/*
 * Name: T1.cpp
 * Problem: 统计指定范围里的数
 * Author: Teacher Gao.
 * Date&Time: 2024/10/02 11:39
 */

#include <iostream>

using namespace std;

int main()
{
	int n, L, R, a[10005] = {0};
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	cin >> L >> R;

	int tot = 0;
	for (int i = 1; i <= n; i++) {
		if (L <= a[i] && a[i] <= R) {
			tot++;
		}
	}

	cout << tot << endl;

	return 0;
}

T2. 按照个位数排序

对于给定的正整数序列,按照个位数从小到大排序,个位数相同的按照本身大小从小到大排序。

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

  • 输入
    第一行 1 1 1 个整数 n n n,表示序列的大小。 0 < n ≤ 1000 0 < n ≤ 1000 0<n1000
    第二行 n n n 个正整数,表示序列的每个数,每个数不大于 100000000 100000000 100000000
  • 输出
    输出按照题目要求排序后的序列。
  • 样例输入
    6
    17 23 9 13 88 10 
    
  • 样例输出
    10 13 23 17 88 9
    

思路分析

此题考查排序算法,难度一般。

此题比较麻烦的点在于排序规则,但是只要仔细去分析,是不太可能会出错的。由于数据量较小,任何时间复杂度不高于 O ( n 2 ) O(n^2) O(n2) 的排序算法均可以解决此题。更方便地是采用 sort 函数,此时需要自定义比较规则,只需要按照题目要求完成自定义规则的书写即可,具体参考示例代码。

/*
 * Name: T2.cpp
 * Problem: 按照个位数排序
 * Author: Teacher Gao.
 * Date&Time: 2024/10/02 11:45
 */

#include <iostream>
#include <algorithm>

using namespace std;

bool cmp(int a, int b) {
	if (a % 10 != b % 10) {
		return a % 10 < b % 10;
	}
	return a < b;
}

int main()
{
	int n, a[1005] = {0};
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	
	sort(a + 1, a + n + 1, cmp);

	for (int i = 1; i <= n; i++) {
		cout << a[i] << " ";
	}

	return 0;
}

T3. 过滤多余的空格

一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。

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

  • 输入
    一行,一个字符串(长度不超过 200 200 200),句子的头和尾都没有空格。
  • 输出
    过滤之后的句子。
  • 样例输入
    Hello      world.This is    c language.
    
  • 样例输出
    Hello world.This is c language.
    

思路分析

此题考查字符串操作,难度入门。

此题本意是考查字符串的查找与删除操作,然而利用 cin 无法读取空格这个事实,我们可以非常优雅的解决此题。

/*
 * Name: T3.cpp
 * Problem: 过滤多余的空格
 * Author: Teacher Gao.
 * Date&Time: 2024/10/02 11:56
 */

#include <iostream>

using namespace std;

int main()
{
	bool flag = 1;
	string s;
	while (cin >> s) {
		if (flag) flag = 0;
		else cout << " ";
		cout << s;
	}

	return 0;
}

T4. 图像叠加

给出两幅相同大小的黑白图像(用 0 − 1 0-1 01 矩阵)表示, 0 0 0 表示白点, 1 1 1 表示黑点,求两幅图像叠加后的图像。

说明:若两幅图像在相同位置上的像素点都是白色,叠加后为白色,否则为黑色。

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

  • 输入
    第一行包含两个整数 m m m n n n,表示图像的行数和列数,中间用单个空格隔开。 1 ≤ m ≤ 100 , 1 ≤ n ≤ 100 1 \le m \le 100, 1 \le n \le 100 1m100,1n100
    之后 m m m 行,每行 n n n 个整数 0 0 0 1 1 1,表示第一幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。
    之后 m m m 行,每行 n n n 个整数 0 0 0 1 1 1,表示第二幅黑白图像上各像素点的颜色。相邻两个数之间用单个空格隔开。
  • 输出
    m m m 行,每行 n n n 个整数,表示叠加后黑白图像上各像素点的颜色。
  • 样例输入
    3 3
    1 0 1
    0 0 1
    1 1 0
    1 1 0
    0 0 1
    0 0 1
    
  • 样例输出
    1 1 1
    0 0 1
    1 1 1
    

思路分析

此题考查二维数组的基本操作,难度入门。

此题的图像叠加过程可以用 if 语句进行判断实现,在输入第二个数组的过程中就可以进行数据处理了,因此可以不用第二个数组。考虑到图像数据只有 0 0 0 1 1 1,可以用按位或 | 免去 if 语句,实现更简洁的代码,具体参考示例代码。事实上,在处理过程中就可以进行输出了,这里为了保持输出结果易查,单独写了输出的循环。

/*
 * Name: T4.cpp
 * Problem: 图像叠加
 * Author: Teacher Gao.
 * Date&Time: 2024/10/02 11:59
 */

#include <iostream>

using namespace std;

int main()
{
	int m, n, b, a[105][105];
	cin >> m >> n;
	for (int i = 1; i <= m; i++) {
		for (int j = 1; j <= n; j++) {
			cin >> a[i][j];
		}
	}

	for (int i = 1; i <= m; i++) {
		for (int j = 1; j <= n; j++) {
			cin >> b;
			a[i][j] |= b;
		}
	}
	
	for (int i = 1; i <= m; i++) {
		for (int j = 1; j <= n; j++) {
			cout << a[i][j] << " ";
		}
		cout << endl;
	}

	return 0;
}

T5. 出书最多

假定图书馆新进了 m m m 10 ≤ m ≤ 999 10 ≤ m ≤ 999 10m999)本图书,它们都是由 n n n 1 ≤ n ≤ 26 1 ≤ n ≤ 26 1n26)个作者独立或相互合作编著的。假设 m m m 本图书编号为整数( 1 1 1 999 999 999),作者的姓名为字母( A A A Z Z Z),请根据图书作者列表找出参与编著图书最多的作者和他的图书列表。

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

  • 输入
    第一行为所进图书数量 m m m,其余 m m m 行,每行是一本图书的信息,其中第一个整数为图书编号,接着一个空格之后是一个由大写英文字母组成的没有重复字符的字符串,每个字母代表一个作者。输入数据保证仅有一个作者出书最多。
  • 输出
    输出有多行:
    第一行为出书最多的作者字母;
    第二行为作者出书的数量;
    其余各行为作者参与编著的图书编号(按输入顺序输出)。
  • 样例输入
    11
    307 F
    895 H
    410 GPKCV
    567 SPIM
    822 YSHDLPM
    834 BXPRD
    872 LJU
    791 BPJWIA
    580 AGMVY
    619 NAFL
    233 PDJWXK
    
  • 样例输出
    P
    6
    410
    567
    822
    834
    791
    233
    

思路分析

此题考查二维数组和桶的思想,难度一般。

桶的思想用来解决前两问,具体可以参考 2021 年 9 月二级 T5,二维数组用来解决第三问,即存储每个作者的图书列表。事实上,我们可以用 vector 这个模板来更好的实现存储每个作者的图书列表这个功能。具体参考示例代码。

/*
 * Name: T5.cpp
 * Problem: 出书最多
 * Author: Teacher Gao.
 * Date&Time: 2024/10/02 13:56
 */

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	int n, x;
	vector<int> book[100];
	cin >> n;
	string auth;
	for (int i = 1; i <= n; i++) {
		cin >> x >> auth;
		for (int j = 0; j < auth.size(); j++) {
			book[auth[j]].push_back(x);
		}
	}

	int ans = 0;
	char id = 0;
	for (int i = 'A'; i <= 'Z'; i++) {
		if (book[i].size() > ans) {
			ans = book[i].size();
			id = i;
		}
	}

	cout.put(id);
	cout << endl << ans << endl;
	
	for (int i = 0; i < ans; i++) {
		cout << book[id][i] << endl;
	}

	return 0;
}

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

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

相关文章

如何计算服务需要部署多少台机器?

写在前面 遇到流量激增的性能问题&#xff0c;相信绝大多数人的第一反应不是优化代码而是加机器&#xff01;比如隔壁微博一旦出现爆炸性吃瓜&#xff0c;就会紧急扩机器&#xff0c;防止自己服务被打挂&#xff08;虽然经常被打挂 这篇文章我们就来讲一下如何 计算出一个服务…

项目配置说明

文章目录 一、下载 vscode 并安装相应扩展1.1 下载 vscode1.2 安装扩展 二、git 项目三、git 提交流程3.1 确定要提交的代码 四、git 拉新流程 一、下载 vscode 并安装相应扩展 1.1 下载 vscode vscode 我已经发群里了&#xff0c;或者自己去官网下载也行 1.2 安装扩展 打开…

四舵轮车辆中的舵轮角度计算

对于四舵轮车辆&#xff0c;或者对角线安装的双舵轮车辆来说&#xff0c;当同时存在线速度与角速度的时候&#xff0c;它的两个轮子的角度值是不一样的&#xff0c;而它的角度值与其当时的瞬心相关&#xff08;机器人模型与ICR(Instantaneous Center of Rotation)&#xff09;。…

IP6537_C_30W20V--移动设备快充的得力助手,集成 14 种快充协议的降压 SoC

IP6537_C_30W20V是一款集成同步开关的降压转换器、支 持 14 种输出快充协议、支持 Type-C 输出和 USB PD2.0/PD3.0(PPS)协议的 SoC&#xff0c;为车载充电器、 快充适配器、智能排插提供完整的解决方案。 IP6537_C_30W20V支持 USB Type-C 或者 USB A 输出&#xff0c; 5V 输出功…

火语言RPA流程组件介绍--模拟键盘输入

&#x1f6a9;【组件功能】&#xff1a;在浏览器网页中使用键盘操作模拟输入值 配置预览 配置说明 按键间隔(ms) 支持T或# 输入仅支持整型 两次输入按键的间隔,单位毫秒 输入内容 支持T或# 默认FLOW输入项 需要输入的内容 超时时间 支持T或# 输入仅支持整型 输入的超时时…

我们的赞赏码

每一位粉丝的认可&#xff0c;都是我们前进的动力。欢迎为我们点赞、转发和分享&#xff0c;让我们一起传递美好与快乐&#xff01; 我们真诚地邀请您来赞赏我们&#xff0c;您的认可是我们前进的动力&#xff01; 赞赏我们只要0.99&#xff0c;让我们一起在CSDN增长知识&…

OpenAI 开发者大会!实时语音功能有API了,GPT-4o支持多模态微调,上下文cache功能上线

家人们&#xff01;十一假期第1天&#xff0c; OpenAI一年一度的开发者大会又来了惹&#xff01;今年的开发者大会分成三部分分别在美国、英国、新加坡三个地点举办&#xff0c;刚刚结束的是第一场。 去年的OpenAI开发者大会公布了GPT-4 Turbo和GPTs&#xff0c;今年没有大更新…

【硬件模块】SG90舵机模块

SG90舵机模块实物图 180度舵机&#xff1a;可以控制旋转角度、有角度定位。上电后舵机自动复位到0度&#xff0c;通过一定参数的脉冲信号控制它的角度。 360舵机&#xff1a;不可控制角度&#xff0c;只能控制顺时针旋转、逆时针旋转、停止和调节转速。 如图所示为&#xff1a;…

仅用pygame+python实现植物大战僵尸-----完成比完美更重要

前言 其实这个项目再我上半年就想着做一下的&#xff0c;但是一直拖到现在&#xff0c;我现在深刻的理解到&#xff0c;不要想那么多&#xff0c;先做&#xff0c;因为永远不可能准备好&#xff0c;都是边做边学便准备的&#xff0c;完成比完美更重要&#xff1b;使用python&a…

【YOLO学习】YOLOv2详解

文章目录 1. 概述2. Better2.1 Batch Normalization&#xff08;批归一化&#xff09;2.2 High Resolution Classifier&#xff08;高分辨率分类器&#xff09;2.3 Convolutional With Anchor Boxes&#xff08;带有Anchor Boxes的卷积&#xff09;2.4 Dimension Clusters&…

每日一题|1928. 规定时间内到达终点的最小花费|动态规划、最小路径

本题需要使用动态规划进行解决。 分析&#xff1a; 求解最小值而且每一次的状态是由上一次的状态推导出来的&#xff0c;用动态规划。 难点&#xff1a;dp数组的定义和更新。 1、dp数组的定义 在时刻t&#xff0c;位置i处&#xff0c;此时的花费可以表示为如下的形式&#…

CNN卷积神经网络算法原理

全连接神经网络概述 输入层在左点自外&#xff0c;相应的输出层在右点之外&#xff0c; 这就像一个函数&#xff0c;yf(x)&#xff0c;x即输入&#xff0c;f即隐藏层&#xff0c;y即输出&#xff0c;或者是ymodel(x) 全连接神经网络的结构单元 主要是从单元到整体&#xff0c…

杀疯啦!yolov11+strongsort的目标跟踪实现

目录 yolov11介绍——实时端到端物体检测 概述 主要特征 支持的任务和模式 性能指标 总结 strongsort介绍 指标图 系统定位 效果展示 训练与预测 UI设计 界面其他功能展示 完整代码实现UI界面 yolov11介绍——实时端到端物体检测 概述 YOLO11 是 Ultralytics Y…

基于yolov5 无人机检测包含:数据集➕训练好的代码模型训练了300轮 效果看下图 map97%以上

基于yolov5 无人机检测包含:数据集➕训练好的代码模型训练了300轮 效果看下图 map97%以上 基于YOLOv5的无人机检测项目 项目名称 基于YOLOv5的无人机检测 (Drone Detection with YOLOv5) 项目概述 该项目使用YOLOv5模型进行无人机目标检测。数据集包含大量带有标注的无人机…

wsl中安装ubuntu,vscode访问这个ubuntu

WSL1升级为WSL2 wsl --set-default-version 2 wsl --set-version Ubuntu-22.04 2在windows商店中也可以安装ubuntu&#xff0c;在这个ubuntu中windows的c盘在/mnt/c中

国庆刷题(day2)

C语言刷题&#xff1a; C刷题&#xff1a;

数据结构与算法——Java实现 27.双端队列

很多人觉得做一件事付出了10分的努力&#xff0c;却只得到5分的汇报。 其实剩下的五分&#xff0c;是在填补你过往的懒惰。 只有将过往的懒惰填满&#xff0c; 努力才会有正向结果 —— 24.10.3 一、概述 双端队列、队列、栈对比&#xff1a; 队列 一端删除&#xff08;头&am…

计算机毕业设计 基于Python的个性化旅游线路推荐系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

C++基础补充(02)C++其他控制语句break continue goto等

文章目录 1. break2. continue 语句3. goto 语句goto的存在 4. 跳出多重循环4.1 goto 直接跳转4.2 C11及其后版本的 return 语句4.3 使用标志变量 在C中&#xff0c;控制语句用于管理程序的执行流程。常见有 break、continue 和 goto。 1. break break语句主要用于在循环或者s…

【GEE学习第一期】GEE介绍、注册及基本使用

【GEE学习第一期】GEE介绍、注册及基本使用 GEE基本介绍GEE架构编辑语言&#xff1a;JavaScript GEE注册GEE平台界面GEE编辑器API区详解 GEE环境配置本地Python环境配置在线Python环境配置 参考 GEE基本介绍 地球引擎代码编辑器&#xff08;Google Earth Engine, GEE&#xff…