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

T1. 输出整数部分

输入一个双精度浮点数 f f f,输出其整数部分。

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

  • 输入
    一个双精度浮点数 f f f 0 < f < 100000000 0 < f < 100000000 0<f<100000000
  • 输出
    一个整数,表示浮点数的整数部分。
  • 样例输入
    3.8889
    
  • 样例输出
    3
    

思路分析

此题考查基本输入输出与强制类型转换,属于入门题。

此题只需要在输出时将变量 f 强制转换为 int 类型即可。

/*
 * Name: T1.cpp
 * Problem: 输出整数部分
 * Author: Teacher Gao.
 * Date&Time: 2024/03/04 22:10
 */

#include <iostream>

using namespace std;

int main()
{
	double f;
	cin >> f;

	cout << int(f) << endl;

	return 0;
}

T2. 疫情集中隔离

A A A 同学 12 12 12 月初从国外回来,按照防疫要求,需要进行 14 14 14 天集中隔离,请你实现一个程序,根据回国的时间计算集中隔离结束的日期。

比如, 12 12 12 1 1 1 号回来, 1 1 1 号当天开始隔离, 14 14 14 号是隔离的最后一天,因此 14 14 14 号是集中隔离结束的日期。

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

  • 输入
    一个整数 x x x,表示 A A A 同学 12 12 12 x x x 号回国。 1 ≤ x ≤ 15 1 ≤ x ≤ 15 1x15
  • 输出
    一个整数 y y y,表示 A A A 同学结束集中隔离的日期,即 12 12 12 y y y A A A 结束集中隔离。
  • 样例输入
    1
    
  • 样例输出
    14
    

思路分析

此题考查算术运算,属于入门题。

此题只需要将变量 x 加上 13 13 13 并输出即可。之所以加 13 13 13 是因为回国当天算隔离的第 1 1 1 天,后续只需要再隔离 13 13 13 天即可,也就是 13 13 13 天后就是隔离的最后一天。

/*
 * Name: T2.cpp
 * Problem: 疫情集中隔离
 * Author: Teacher Gao.
 * Date&Time: 2024/03/04 22:12
 */

#include <iostream>

using namespace std;

int main()
{
	int x;
	cin >> x;

	cout << x + 13;

	return 0;
}

T3. 字符判断

对于给定的字符,如果该字符是大小写字母或者数字,输出 YES,否则输出 NO

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

  • 输入
    一个字符。
  • 输出
    按照题目要求输出 YES 或者 NO
  • 样例输入 1 1 1
    A
    
  • 样例输出 1 1 1
    YES
    
  • 样例输入 2 2 2
    a
    
  • 样例输出 2 2 2
    YES
    
  • 样例输入 3 3 3
    1
    
  • 样例输出 3 3 3
    YES
    
  • 样例输入 4 4 4
    *
    
  • 样例输出 4 4 4
    NO
    

思路分析

此题考察分支结构,属于入门题。不过分类较多,较为复杂。思路与同年 6 6 6 月份考试的 T3 一致,可以参考 2021 年 6 月青少年软编等考 C 语言一级真题解析中的 T3。

/*
 * Name: T3.cpp
 * Problem: 字符判断
 * Author: Teacher Gao.
 * Date&Time: 2024/03/04 22:13
 */

#include <iostream>

using namespace std;

int main()
{
	char ch;
	cin >> ch;

	if ('0' <= ch && ch <= '9') {
		cout << "YES" << endl;
	}
	else if ('A' <= ch && ch <= 'Z') {
		cout << "YES" << endl;
	}
	else if ('a' <= ch && ch <= 'z') {
		cout << "YES" << endl;
	}
	else {
		cout << "NO" << endl;
	}

	return 0;
}

T4. 统计数

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

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

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

思路分析

此题考查循环结构,以及分支结构判断范围,属于入门题。

此题需要依次判断输入的每个数 x。若 x 大于等于 L L L 并且小于等于 R R R ,则将 x 累加。

/*
 * Name: T4.cpp
 * Problem: 统计数
 * Author: Teacher Gao.
 * Date&Time: 2024/03/04 22:17
 */

#include <iostream>

using namespace std;

int main()
{
	int n, L, R, x;
	cin >> n >> L >> R;

	int tot = 0;
	for (int i = 1; i <= n; i++) {
		cin >> x;
		if (L <= x && x <= R) {
			tot++;
		}
	}

	cout << tot << endl;

	return 0;
}

T5. 最大质因子

质因子是指能整除给定正整数的质数。而最大质因子是指一个整数的所有质因子中最大的那个。

比如 30 30 30 的质因子有 2 2 2 3 3 3 5 5 5,所以最大质因子就是 5 5 5

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

  • 输入
    一个整数 n n n 2 ≤ n ≤ 10000 2 ≤ n ≤ 10000 2n10000
  • 输出
    n n n 的最大质因子
  • 样例输入
    30
    
  • 样例输出
    5
    

思路分析

此题考查质数判断,需要用到循环结构,属于一般应用题。

此题可以用循环遍历从 n n n 2 2 2 的所有整数,依次判断每个整数 i 是否为 n 的因子。若是 n 的因子,则继续判断 i 是否为质数。若为质数,则输出 i 即可结束程序。

思路与同年 9 9 9 月份考试的 T5 大体相同,只是需要在判断 i 是否为质数之前先判断一下 i 是否为 n 的因子。质数判断过程的分析可以参考 2021 年 9 月青少年软编等考 C 语言一级真题解析中的 T5。

/*
 * Name: T5_1.cpp
 * Problem: 最大质因子
 * Author: Teacher Gao.
 * Date&Time: 2024/03/04 22:20
 */

#include <iostream>

using namespace std;

int main()
{
	int n;
	cin >> n;

	for (int i = n; i >= 2; i--) {
		if (n % i != 0) {
			continue;
		}
		
		bool flag = 1;
		for (int j = 2; j * j <= i; j++) {
			if (i % j == 0) {
				flag = 0;
				break;
			}
		}

		if (flag) {
			cout << i << endl;
			break;
		}
	}

	return 0;
}

此题还可以采用质因子分解的方式求解。具体来说,我们可以设置一个变量 ans 用于记录答案,然后用循环遍历从 2 2 2 n n n 的所有整数,依次判断每个整数 i i i 是否为 n n n 的因子。若是 n n n 的因子,则更新一次答案,并将所有因子 i i i n n n 中除去。当循环结束后,输出变量 ans 即可。在这个过程中不需要判断 i i i 是否为质数,并且 n n n 会不断地缩小,因此均摊情况下效率更高。

/*
 * Name: T5_2.cpp
 * Problem: 最大质因子
 * Author: Teacher Gao.
 * Date&Time: 2024/03/23 08:56
 */

#include <iostream>

using namespace std;

int main()
{
	int n, ans;
	cin >> n;

	for (int i = 2; i <= n; i++) {
		while (n % i == 0) {
			ans = i;
			n /= i;
		}
	}

	cout << ans << endl;

	return 0;
}
  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
202305 青少年软件编程等级试的 scratch 一级真题包含以下内容。 1. 创建一个新项目,命名为“动画”,并设置背景为某个场景。 2. 在场景中添加一个角色,并在角色属性设置中选择一个适合的样式。 3. 设置一个事件,当角色被点击时,让角色进行旋转。 4. 添加一个新的角色,并设置为另一个样式。 5. 设置一个事件,当第一个角色碰到第二个角色时,让第二个角色改变样式。 6. 在场景中添加一个音效,当角色发生碰撞时,播放该音效。 7. 设置一个运动指令,让第一个角色在场景中上下移动。 8. 编写一段代码,使第一个角色在接收到键盘按键时,向指定方向移动。 9. 在项目中添加一个文本对象,并设置为显示计数器功能。 10. 编写一段代码,使计数器在角色碰到边界时自增。 在答题时,生需要用 scratch 编程语言完成以上要求,并在操作界面上进行相应设置和调试。生需要理解 scratch 编程的基本概念,如舞台、角色、事件、指令、变量等,并能正确运用这些概念进行程序设计和功能实现。 答题时需要注意项目的整体逻辑和流程的连贯性,角色的样式选择适合题目要求,并且能够正确实现各个要求中规定的功能和效果。同时还需要注意代码的可读性和注释的添加,以便于他人阅读和理解。 通过完成这个一级真题生可以初步掌握 scratch 编程的基本语法和操作,为进一步学习和应用编程奠定基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朔北之忘 Clancy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值