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

2024-03-05 10:20

本文主要是介绍2021 年 6 月青少年软编等考 C 语言一级真题解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • T1. 数的输入和输出
    • 思路分析
  • T2. (a / b) × c 的值
    • 思路分析
  • T3. 大写字母的判断
    • 思路分析
  • T4. 特殊求和
    • 思路分析
  • T5. 硬币翻转
    • 思路分析

T1. 数的输入和输出

输入一个整数和双精度浮点数,先将浮点数保留 2 2 2 位小数输出,然后输出整数。

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

  • 输入
    一行两个数,分别为整数 n n n(不超过整型范围),双精度浮点数 f f f,以一个空格分开。
  • 输出
    一行两个数,分别为保留 2 2 2 位小数输出的 f f f,以及整数 n n n,以一个空格分开。
  • 样例输入
    100 123.456789
    
  • 样例输出
    123.46 100
    

思路分析

此题考查整数和浮点数的输入输出,以及浮点数精度控制,属于入门题。按照样例输出的格式编写代码输出即可,注意输出变量的顺序与输入顺序是相反的。

/** Name: T1.cpp* Problem: 数的输入和输出* Author: Teacher Gao.* Date&Time: 2024/03/04 20:31*/#include <cstdio>using namespace std;int main()
{int a;double b;scanf("%d%lf", &a, &b);printf("%.2f %d\n", b, a);return 0;
}

T2. (a / b) × c 的值

给定整数 a a a b b b c c c,计算 ( a / b ) × c (a / b) \times c (a/b)×c 的值,这里的除法为实数除法。

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

  • 输入
    一行,三个整数 a a a b b b c c c,整数间以空格分隔。 1 ≤ a , b , c ≤ 1000 1 ≤ a,b,c ≤ 1000 1a,b,c1000
  • 输出
    将计算结果保留 6 6 6 位小数输出。
  • 样例输入
    1 3 3
    
  • 样例输出
    1.000000
    

思路分析

此题考查算术运算,数据类型转换,以及浮点数精度控制,属于入门题。按照题目中的公式编写代码计算并输出即可。

至于算术运算中的整数除法转换为实数除法,可以使用自动类型转换,即将公式 (a / b) * c 写成 (1.0 * a / b) * c。由于 1.0double 型常量,因此 1.0 * a 的值会是 double 型,而数值大小并未发生变化。

更多数据类型转换相关内容,可以参考基本类型这篇文章。

/** Name: T2.cpp* Problem: (a / b) × c 的值* Author: Teacher Gao.* Date&Time: 2024/03/04 20:33*/#include <cstdio>using namespace std;int main()
{int a, b, c;scanf("%d%d%d", &a, &b, &c);printf("%.6f", (1.0 * a / b) * c);return 0;
}

T3. 大写字母的判断

输入一个字符,判断是否是英文大写字母,即是否是 A ∼ Z A \sim Z AZ 中的一个。

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

  • 输入
    一个字符。
  • 输出
    如果是英文大写字母,则输出 YES,否者输出 NO
  • 样例输入
    K
    
  • 样例输出
    YES
    

思路分析

此题考查分支结构,以及关系运算与逻辑运算,属于入门题。此题相比同年 3 3 3 月份的 T3,难度降低了不少。

C/C++ 中的 char 类型是以 ASCII 码的形式存储在内存中的,而 ASCII 码是对常用的 128 128 128 个字符进行了整数编码,因此在 C/C++ 中我们有时把 char 类型也称为整数类型。整数类型支持关系运算,因此我们可以直接对 char 类型数据执行关系运算,以确定该数据是否在我们所需要的范围。

/** Name: T3.cpp* Problem: 大写字母的判断* Author: Teacher Gao.* Date&Time: 2024/03/04 20:35*/#include <iostream>using namespace std;int main()
{char ch;cin >> ch;if ('A' <= ch && ch <= 'Z') {cout << "YES" << endl;}else {cout << "NO" << endl;}return 0;
}

T4. 特殊求和

如果一个数能够被 7 7 7 整除或者十进制表示中含有数字 7 7 7,那么我们称这个数为幻数,比如 17 17 17 21 21 21 73 73 73 是幻数,而 6 6 6 59 59 59 不是。

对于给定的 n n n,求出 1 ∼ n 1 \sim n 1n 中所有幻数的和。

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

  • 输入
    一个整数 n n n 1 < n < 10000 1 < n < 10000 1<n<10000
  • 输出
    一个整数,表示 1 ∼ n 1 \sim n 1n 中所有幻数的和。
  • 样例输入
    14
    
  • 样例输出
    21
    

思路分析

此题考查循环结构,分支结构判断倍数关系,以及数位拆分,属于一般应用题。此题相比同年 3 3 3 月份的 T4,难度提升较大,涉及到循环嵌套和较为复杂的逻辑。

此题需要用循环遍历 1 1 1 n n n 之间的所有整数,依次判断每个数 i。若 i 7 7 7 的倍数,则将其累加;若 i 不是 7 7 7 的倍数,则对 i 进行数位拆分,依次判断每一位是否为 7 7 7,若为 7 7 7,则将 i 累加。

需要注意数位拆分过程中可能会修改 i 的值,这可能导致外层循环无法退出,因此需要一个临时变量 t 来存储 i 的值,然后对 t 进行数位拆分,这样就不会影响外层循环的进行。此外,一旦检测到 t 的某一位数值是 7 7 7,则将 i 累加,而不是 t,因为此时 t 可能已经被改变了。并且累加之后要及时结束数位拆分的过程,否则可能会将 i 累加多次,导致结果偏大。

/** Name: T4.cpp* Problem: 特殊求和* Author: Teacher Gao.* Date&Time: 2024/03/04 20:36*/#include <iostream>using namespace std;int main()
{int n, sum = 0;cin >> n;for (int i = 1; i <= n; i++) {if (i % 7 == 0) {sum += i;continue;}int t = i;while (t) {if (t % 10 == 7) {sum += i;break;}t /= 10;}	}cout << sum << endl;return 0;
}

T5. 硬币翻转

假设有 n n n 个硬币( n n n 为不大于 5000 5000 5000 的正整数),从 1 1 1 n n n 按顺序依次编号,初始时全部处于正面向上的状态;有 m m m 个人( m m m 为不大于 n n n 的正整数)也从 1 1 1 m m m 依次编号。

第一个人( 1 1 1 号)将硬币全部翻转一次,第二个人( 2 2 2 号)将编号为 2 2 2 的倍数的硬币翻转一次,第三个人( 3 3 3 号)将编号为 3 3 3 的倍数的硬币翻转一次。依照编号递增顺序,以后的人都和 3 3 3 号一样,将凡是自己编号倍数的硬币翻转一次。

请问:当第 m m m 个人操作之后,哪些硬币是正面向上的,按从小到大输出其编号,以空格分开。

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

  • 输入
    输入正整数 n n n m m m,以单个空格隔开。
  • 输出
    顺次输出正面向上的硬币的编号,其间用空格间隔。
  • 样例输入
    10 10
    
  • 样例输出
    2 3 5 6 7 8 10
    

思路分析

此题考查循环结构,以及标记法,属于基础题。但是涉及到数组,相比同年 3 3 3 月份的 T5,难度提升较大。

此题可以设置一个数组 a[],用来标记每一个硬币的状态(正面朝上还是反面朝上),我们可以用 a[i] == 0 表示正面朝上,a[i] == 1 表示反面朝上。然后用两层循环分别枚举硬币编号 i 和人的编号 j,若硬币编号是人的编号的倍数,即 i % j == 0,则将硬币状态进行反转。当两层循环枚举结束之后,依次遍历每一个硬币的状态 a[i],若 a[i] == 0 则表示编号为 i 的硬币正面朝上,输出 i 即可。

两层循环枚举时,外层循环枚举人的编号或者硬币编号都可以。不过若用外层循环枚举人的编号 j,那么内层循环枚举硬币编号 i 时可以从 j 开始,步长设为 j,这样就不需要用 if 语句判断硬币编号是否是人的编号的倍数了(见参考代码)。此外,反转硬币状态可以用 a[i] = !a[i] 代替 if 语句的判断。

在此题中,若人的数量 m m m 与硬币数量 n n n 相等,则可以利用数学知识进行求解,既不需要数组,也不需要两层循环嵌套,只需要一层循环即可解决,可以极大地简化程序,并提高程序效率。

/** Name: T5.cpp* Problem: 硬币翻转* Author: Teacher Gao.* Date&Time: 2024/03/04 20:41*/#include <iostream>using namespace std;int main()
{int n, m;bool a[5005] = {0};cin >> n >> m;// 枚举人的编号for (int j = 1; j <= m; j++) {// 枚举硬币编号for (int i = j; i <= n; i += j) {a[i] = !a[i];}}for (int i = 1; i <= n; i++) {if (!a[i]) {cout << i << " ";}}return 0;
}

这篇关于2021 年 6 月青少年软编等考 C 语言一级真题解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/776208

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁