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

目录

  • T1. 与指定数字相同的数的个数
    • 思路分析
  • T2. 合法 C 标识符
    • 思路分析
  • T3. 计算鞍点
    • 思路分析
  • T4. 谁考了第 k 名
    • 思路分析
  • T5. 石头剪刀布
    • 思路分析

T1. 与指定数字相同的数的个数

输出一个整数序列中与指定数字相同的数的个数。

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

  • 输入
    输入包含三行:
    第一行为 n n n,表示整数序列的长度( n ≤ 100 n \le 100 n100)。
    第二行为 n n n 个整数,整数之间以一个空格分开。
    第三行包含一个整数,为指定的整数 m m m
  • 输出
    输出为 n n n 个数中与 m m m 相同的数的个数。
  • 样例输入
    3
    2 3 2
    2
    
  • 样例输出
    2
    

思路分析

此题考查一维数组的查询操作,属于入门题。

此题只需要将输入的 n n n 个整数存储到数组 a 中,然后在数组 a 中查询 m 出现的次数即可。这里可以设置一个计数器变量 tot 进行统计,注意 tot 需要初始化为 0 0 0。之所以需要用到数组,是因为此题将需要查询的数放在了最后进行输入。

/** Name: T1.cpp* Problem: 与指定数字相同的数的个数* Author: Teacher Gao.* Date&Time: 2024/03/26 02:33*/#include <iostream>using namespace std;int main()
{int n, m, a[105];cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];cin >> m;int tot = 0;for (int i = 1; i <= n; i++) {if (a[i] == m) {tot++;}}cout << tot << endl;return 0;
}

T2. 合法 C 标识符

给定一个不包含空白符的字符串,请判断是否是 C 语言合法的标识符,题目保证这些字符串一定不是 C 语言的保留字。

C 语言标识符要求:

  1. 非保留字。
  2. 只包含字母、数字及下划线(_)。
  3. 不能以数字开头。

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

  • 输入
    一行,包含一个字符串,字符串中不包含任何空白字符,且长度不大于 20 20 20
  • 输出
    一行,如果它是 C 语言的合法标识符,则输出 yes,否则输出 no
  • 样例输入
    RKPEGX9R;TWyYcp
    
  • 样例输出
    no
    

思路分析

此题考查字符串的遍历与字符检测,属于入门题。

此题只需要按照题意对输入的字符串进行遍历检测即可。注意,确定一个标识符合法需要将整个标识符字符串遍历结束,确定没有违反规定才可以。而确定一个标识符非法只需要在遍历过程中检测出一个不合法的字符即可。

/** Name: T2.cpp* Problem: 合法 C 标识符* Author: Teacher Gao.* Date&Time: 2024/03/26 02:36*/#include <iostream>
#include <string>using namespace std;int main()
{string str;cin >> str;int len = str.length();for (int i = 0; i < len; i++)str[i] = tolower(str[i]);if ((str[0] < 'a' || 'z' < str[0]) && str[0] != '_') {cout << "no" << endl;return 0;}for (int i = 1; i < len; i++) {if ('0' <= str[i] && str[i] <= '9')continue;if ('a' <= str[i] && str[i] <= 'z')continue;if ('_' == str[i])continue;cout << "no" << endl;return 0;}cout << "yes" << endl;return 0;
}

T3. 计算鞍点

给定一个 5 × 5 5×5 5×5 的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。

例如:在下面的例子中,第 4 4 4 行第 1 1 1 列的元素就是鞍点,值为 8 8 8

11  3  5  6  9
12  4  7  8 10
10  5  6  9 118  6  4  7  2
15 10 11 20 25

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

  • 输入
    输入包含一个 5 5 5 5 5 5 列的矩阵。
  • 输出
    如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出 not found
  • 样例输入
    11  3  5  6  9
    12  4  7  8 10
    10  5  6  9 118  6  4  7  2
    15 10 11 20 25
    
  • 样例输出
    4 1 8
    

思路分析

此题考察二维数组的应用,难度一般。

可以采用标记法,先将每行的最大值进行标记,然后将每列的最小值进行标记。然后检测标记数组,若某个位置被标记了两次,则该位置就是鞍点。

/** Name: T3.cpp* Problem: 计算鞍点* Author: Teacher Gao.* Date&Time: 2024/03/26 02:51*/#include <iostream>using namespace std;int main()
{int n, m;int a[10][10], b[10][10] = {0};for (int i = 1; i <= 5; i++)for (int j = 1; j <= 5; j++)cin >> a[i][j];for (int i = 1; i <= 5; i++) {int tmp = 0, tmpj = 0;for (int j = 1; j <= 5; j++) {if (tmp < a[i][j]) {tmp = a[i][j];tmpj = j;}}b[i][tmpj]++;}for (int j = 1; j <= 5; j++) {int tmp = 1e9, tmpi = 0;for (int i = 1; i <= 5; i++) {if (tmp > a[i][j]) {tmp = a[i][j];tmpi = i;}}b[tmpi][j]++;}for (int i = 1; i <= 5; i++) {for (int j = 1; j <= 5; j++) {if (2 == b[i][j]) {cout << i << " " << j << " " << a[i][j] << endl;return 0;}}}cout << "not found";return 0;
}

T4. 谁考了第 k 名

在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第 k k k 名学生的学号和成绩。

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

  • 输入
    第一行有两个整数,分别是学生的人数 n n n,所求的目标名次 k k k 1 ≤ k ≤ n ≤ 100 1 \le k \le n \le 100 1kn100
    其后有 n n n 行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
  • 输出
    输出第 k k k 名学生的学号和成绩,中间用空格分隔。请用 %g 输出成绩。
  • 样例输入
    5 3
    90788001 67.8
    90788002 90.3
    90788003 61
    90788004 68.4
    90788005 73.9
    
  • 样例输出
    90788004 68.4
    

思路分析

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

由于数据量不大,可以采用任意 O ( n 2 ) O(n^2) O(n2) 的排序算法,更好的方法是采用结构体排序,结合 sort 函数来使用。由于大纲描述较为模糊,并未明确表示二级考察结构体,在六级中提到 “掌握数据结构及结构的概念”,因此这里并没有采用结构体排序的写法,而是采用了冒泡排序。

/** Name: T4.cpp* Problem: 谁考了第 k 名* Author: Teacher Gao.* Date&Time: 2024/03/26 03:11*/#include <cstdio>
#include <algorithm>using namespace std;int main()
{int n, k, a[105];double b[105];scanf("%d%d", &n, &k);for (int i = 1; i <= n; i++)scanf("%d%lf", &a[i], &b[i]);for (int i = 1; i < n; i++) {bool flag = true;for (int j = 1; j <= n - i; j++) {if (b[j] < b[j + 1]) {swap(b[j], b[j + 1]);swap(a[j], a[j + 1]);flag = false;}}if (flag) break;}printf("%d %g", a[k], b[k]);return 0;
}

T5. 石头剪刀布

石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。

一天,小 A A A 和小 B B B 正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头 - 布 - 石头 - 剪刀 - 石头 - 布 - 石头 - 剪刀 . . . ... ...”,就是以 “石头 - 布 - 石头 - 剪刀” 为周期不断循环的。请问,小 A A A 和小 B B B 比了 n n n 轮之后,谁赢的轮数多?

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

  • 输入
    输入包含三行。
    第一行包含三个整数: n , n a , n b n, na, nb n,na,nb,分别表示比了 n n n 轮,小 A A A 出拳的周期长度,小 B B B 出拳的周期长度。 0 < n , n a , n b < 100 0 < n, na, nb < 100 0<n,na,nb<100
    第二行包含 n a na na 个整数,表示小 A A A 出拳的规律。
    第三行包含 n b nb nb 个整数,表示小 B B B 出拳的规律。
    其中, 0 0 0 表示 “石头”, 2 2 2 表示 “剪刀”, 5 5 5 表示 “布”。相邻两个整数之间用单个空格隔开。
  • 输出
    输出一行,如果小 A A A 赢的轮数多,输出 A;如果小 B B 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 A A 赢了 4 4 4 轮, B B B 赢了 2 2 2 轮,双方打平 4 4 4 轮,所以 A A A 赢的轮数多。

思路分析

此题考察数组的灵活应用,难度一般。

可以在输入结束后分别将 a[]b[] 按照给定出拳规律重复存储,直到存储够 n n n 项为止,然后依次对比每一次出拳,进而统计出获胜者。

也可以不进行重复存储,直接用下标对出拳周期 n a na na n b nb nb 分别取余,得到对应的出拳结果。需要注意的是,这种方法需要将出拳规律存储在下标 0 ∼ n a − 1 0 \sim na-1 0na1 0 ∼ n b − 1 0 \sim nb-1 0nb1 范围内。

至于比较出拳结果,可以封装成函数,使得逻辑结构更清晰。当函数返回 0 0 0 时表示平局; − 1 -1 1 表示小 A A A 负; 1 1 1 表示小 A A A 胜。在主函数内将该函数的返回值进行累加,若总数为正,则小 A A A 胜;总数为负,表示小 B B B 胜;否则表示平局。

/** Name: T5.cpp* Problem: 石头剪刀布* Author: Teacher Gao.* Date&Time: 2024/05/26 15:42*/#include <iostream>using namespace std;int check(int a, int b)
{if (a == b) return 0;if (a == 2 && b == 0) return -1;if (a == 5 && b == 2) return -1;if (a == 0 && b == 5) return -1;return 1;
}int main()
{int n, na, nb, tot = 0;int a[105], b[105];cin >> n >> na >> nb;for (int i = 0; i < na; i++) cin >> a[i];for (int i = 0; i < nb; i++) cin >> b[i];for (int i = 0; i < n; i++)tot += check(a[i%na], b[i%nb]);if (tot > 0) cout << 'A' << endl;else if (tot < 0) cout << 'B' << endl;else cout << "draw" << endl;return 0;
}

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

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

相关文章

【CSS】计算属性 calc 函数

CSS 中的 calc() 函数是用于动态计算数值的函数。它可以在 属性的值中执行基本的数学运算&#xff0c;包括加法、减法、乘法和除法&#xff0c;以及使用 CSS 单位进行计算。 calc() 函数的语法如下&#xff1a; calc(expression) 其中 expression 是包含数学运算和 CSS 单位表…

英语学习笔记28——Where are they?

Where are they? 他们在哪里&#xff1f; 课文部分

【NumPy】关于numpy.median()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

贝叶斯算法:机器学习中的“黄金法则”与性能提升之道

&#x1f440;传送门&#x1f440; &#x1f50d;机器学习概述&#x1f340;贝叶斯算法原理&#x1f680;贝叶斯算法的应用✨文本分类✨医疗系统 &#x1f496;贝叶斯算法优化✨贝叶斯算法优化的主要步骤✨贝叶斯算法优化的优点✨贝叶斯算法优化的局限性 &#x1f697;贝叶斯算…

二维前缀异或和,1738. 找出第 K 大的异或坐标值

一、题目 1、题目描述 给你一个二维矩阵 matrix 和一个整数 k &#xff0c;矩阵大小为 m x n 由非负整数组成。 矩阵中坐标 (a, b) 的 值 可由对所有满足 0 < i < a < m 且 0 < j < b < n 的元素 matrix[i][j]&#xff08;下标从 0 开始计数&#xff09;执行…

「贪心算法」摆动序列

力扣原题链接&#xff0c;点击跳转。 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为摆动序列。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。简单来说&#xff0c;摆动…

【iOS开发】—— KVC

【iOS开发】—— KVC 一. KVC的定义key和keyPath的区别用法&#xff1a; 批量复制操作字典模型相互转化KVC的其他方法 KVC原理赋值原理取值原理 一. KVC的定义 KVC&#xff08;Key-value coding&#xff09;键值编码&#xff0c;就是指iOS的开发中&#xff0c;可以允许开发者通…

不用从头训练,通过知识融合创建强大的统一模型

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的开发和训练是一个复杂且成本高昂的过程。数据需求是一个主要问题&#xff0c;因为训练这些模型需要大量的标注数据来保证其准确性和泛化能力&#xff1b;计算资源也是一个…

Java学习路线思维导图

目录 Java学习流程1.学习大纲2.Java开发中常用的DOS命令 Java入门学习思维导图 Java学习流程 通过大纲了解学习的重点&#xff0c;通过目录依次深入【注&#xff1a;Java环境的搭建百度&#xff0c;提升自己百度的能力】 1.学习大纲 学习流程如下&#xff1a; Java基础语法 …

网络安全架构之零信任安全

网络安全架构之零信任安全 文章目录 网络安全架构之零信任安全零信任安全时代背景安全世界“新旧时代”各种攻击风险层出不穷网络安全边界逐渐瓦解内外部威胁愈演愈烈 零信任架构零信任的理念在不可信的网络环境下重建信任构建自适应内生安全机制以身份为基石业务安全访问持续信…

Linux服务的简介与分类

服务的简介与分类 服务的分类 查询已安装的服务和区分服务 #列出所有rpm包默认安装服务的自启动状态 [rootlocalhost ~]# chkconfig --list atd atd 0:关闭 1:关闭 2:关闭 3:启用 4:启用 5:启用 6:关闭 [rootlocalhost ~]# chkconfig --list sshd sshd …

SpringBoot项目中访问HTML页面

在这种情况下&#xff0c;如果你要访问静态页面&#xff0c;肯定是不能正确访问的&#xff1a;会出现如下错误&#xff1a; 那么&#xff0c;此时&#xff0c;你应该&#xff1a; 静态资源映射&#xff1a; import org.springframework.context.annotation.Configuration; im…

command not found: wire 解决方案【学习笔记,不作教程】

command not found: wire command not found: wire command not found: wire go get github.com/google/wire/cmd/wirego install github.com/google/wire/cmd/wirelatest再次在 /bubble/cmd/bubble目录下执行wire wire wire: bubble/cmd/bubble: wrote /Users/zhengshijie/go…

音视频开发5 补充 - Nginx搭建rtmp流媒体服务器,目的是让ffmpeg 可以直播推流

直播推流 ffmpeg -re -i out.mp4 -c copy flv rtmp://server/live/streamName -re, 表示按时间戳读取文件 参考&#xff1a; Nginx 搭建 rtmp 流媒体服务器 (Ubuntu 16.04) https://www.jianshu.com/p/16741e363a77 第一步 准备工作 安装nginx需要的依赖包 打开 ubutun 终端…

[emailprotected](9)属性默认值和类型验证

目录 1&#xff0c;属性默认值1.1&#xff0c;函数组件1.2&#xff0c;类组件 2&#xff0c;属性类型验证2.1&#xff0c;和默认值的关系2.2&#xff0c;使用2.3&#xff0c;举例说明 1&#xff0c;属性默认值 通过组件的 defaultProps 静态属性设置。 1.1&#xff0c;函数组…

lllllllllll

ollllllllllllll

Leetcode 3160. Find the Number of Distinct Colors Among the Balls

Leetcode 3160. Find the Number of Distinct Colors Among the Balls 1. 解题思路2. 代码实现 题目链接&#xff1a;3160. Find the Number of Distinct Colors Among the Balls 1. 解题思路 这一题思路上同样比较清晰&#xff0c;我们只需用两个hash table来分别记录每一个…

Nginx与CDN集成:提升全球访问速度

一、引言 在当今互联网高速发展的时代&#xff0c;用户对于网站访问速度的要求越来越高。为了提升用户体验&#xff0c;许多企业和开发者都在寻求各种方法来优化网站的访问速度。其中&#xff0c;Nginx与CDN&#xff08;内容分发网络&#xff09;的集成就是一个非常有效的方法…

社会网络,生态网络,贸易网络,复杂网络边介数蓄意和随机攻击

​边介数&#xff08;Edge Betweenness&#xff09; # ” 边介数&#xff08;Edge Betweenness&#xff09; 1 边介数&#xff08;Edge Betweenness&#xff09; Summer IS HERE 边介数&#xff08;Edge Betweenness&#xff09;是一种度量边在网络中重要性的指标。它定义为…

golang float转string并去除末尾的0

写go时遇到一个场景要求将得到的浮点数保留两位小数&#xff0c;同时要去除末尾的0&#xff0c;试了一下 fmt.Sprintf 和 strconv.FormatFloat 都没能一步到位&#xff0c;最后只能先按小数位约分然后再转成字符串来解决这个问题&#xff0c;如果各位有更好的方式请在评论里指教…