image

编辑人: 流年絮语

calendar2025-06-01

message4

visits919

第14届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2023年3月12日真题答案及解析

一、单选题

1、执行 print(23/10)语句后,输出的结果是(   )。

A、

2

B、

2.3

C、

3

D、

23

解析:【喵呜刷题小喵解析】:在Python中,除法运算符`/`执行的是浮点数除法。因此,`23/10`的结果是一个浮点数,即2.3。执行`print(23/10)`语句后,输出的结果应为2.3。

2、下列选项中,哪个不是集合中的内置方法?(   )

A isdisioint()

B copy()

C string()

D issubset()

解析:【喵呜刷题小喵解析】:集合(set)是Python的一种内建数据类型,提供了多种方法用于操作集合。其中,`isdisjoint()` 方法用于检查两个集合是否没有交集,`copy()` 方法用于创建一个集合的副本,`issubset()` 方法用于检查一个集合是否是另一个集合的子集。而 `string()` 不是集合的内置方法。因此,选项 C 不是集合中的内置方法。

3、己知:s="hellopython”,执行 print(s[1:8])语句后,输出的结果是(   )。

A、

hello py

B、

hello p

C、

ello py

D、

ello p

解析:【喵呜刷题小喵解析】:在Python中,字符串的索引是从0开始的。执行`print(s[1:8])`语句时,实际上是从索引1开始取到索引7(不包括索引8)的字符。对于字符串`s="hellopython"`,索引1到索引7的字符正好是"hello py",所以输出的结果是"hello py"。

4、下列函数中,哪一个可以生成随机小数?(   )

A、

randint()

B、

randrange()

C、

shuffle()

D、

random()

解析:【喵呜刷题小喵解析】:题目要求找出可以生成随机小数的函数。在Python中,`random()`函数用于生成一个介于0和1之间的随机小数。因此,D选项“random()”是正确答案。而A选项`randint()`用于生成一个指定范围内的随机整数,B选项`randrange()`也用于生成随机整数,但范围可以指定不包括某个值,C选项`shuffle()`用于随机打乱序列中的元素,都不会生成随机小数。

5、下列关于列表描述不正确的是(   )。

A、

列表中的元素可以使用下标/索引访问

B、

列表中的元素可以使用 del 语句删除

C、

使用 add 方法可以向列表中添加元素

D、

列表是包含 0 个或者多个对象引用的有序序列

解析:【喵呜刷题小喵解析】:在Python中,列表(list)是一种有序的数据结构,包含0个或多个对象引用。列表中的元素可以使用下标/索引访问,可以使用del语句删除,但不可以使用add方法添加元素。在Python中添加元素到列表的方法有append()、insert()等。因此,选项C的描述“使用 add 方法可以向列表中添加元素”是不正确的。

二、实操题

6、题目描述:

(注.input()输入函数的括号中不允许添加任何信息)

编程实现:

给定整数 N (-1000 ≤N≤1000),输出比 N 大 1 的数。

例如:N = 5,比 5 大 1 的数是 6,则输出 6。

输入描述:

输入一个整数 N (-1000≤N≤1000)

输出描述:

输出一个整数,表示比 N 大 1 的数


样例输入:

5

样例输岀:

6

参考答案:```pythonN = int(input())print(N + 1)```

解析:【喵呜刷题小喵解析】:
首先,题目要求输入一个整数N,输出比N大1的数。我们可以使用Python的内置函数`input()`来读取用户输入的整数,然后使用`int()`函数将输入的字符串转换为整数。最后,我们使用`print()`函数输出比N大1的数,即`N + 1`。

由于题目要求`input()`函数中不允许添加任何信息,所以我们直接将`input()`函数作为代码的第一行,以获取用户输入的整数N。在下一行,我们将用户输入的字符串转换为整数,并使用`print()`函数输出比N大1的数。

根据题目给定的样例输入和样例输出,我们可以验证我们的代码的正确性。当输入5时,输出应为6,与题目要求的输出一致。

7、题目描述:

(注.input()输入函数的括号中不允许添加任何信息)

编程实现:

给定一个正整数 N (10≤N≤10000),,输出 N 中所有数位上最小的数字。

例如:N=1182,1182 各数位上的数字分别为 1、1、8、2,其中数位上最小的数字为 1,则输出 1。

输入描述:

输入一个正整数 N (10≤N≤10000)

输出描述:

输出一个整数,表示 N 中所有数位上最小的数字


样例输入:

1182

样例输岀:

1

参考答案:br />对于输入的整数N,首先将其转化为字符串,然后遍历字符串中的每一个字符,将其转化为对应的数字,并找到其中的最小值,最后输出这个最小值。

解析:【喵呜刷题小喵解析】

根据题目要求,我们需要找出输入的正整数N中所有数位上最小的数字。因此,我们可以将输入的整数转化为字符串,然后遍历字符串中的每一个字符,将其转化为对应的数字,并找到其中的最小值。

具体实现步骤如下:

1. 将输入的整数N转化为字符串;
2. 初始化一个变量min_digit,将其值设为正无穷大;
3. 遍历字符串中的每一个字符,将其转化为对应的数字digit;
4. 如果digit小于min_digit,则更新min_digit的值为digit;
5. 输出min_digit的值。

需要注意的是,由于输入的整数N的范围是10到10000,因此我们可以直接将整数转化为字符串,而不需要进行任何特殊的处理。另外,由于题目中明确规定了输入函数input()的括号中不允许添加任何信息,因此我们需要从标准输入中读取输入的整数N。

8、题目描述:

(注.input()输入西数的括号中不允许添加任何信息)

编程实现:

给定—组整数数据(不超过 100 个整数),按顺序完成以下操作并输出结果。

操作要求:

1)将数据中的所有负整数转化为正整数;

2)对转化后的数据进行从小到大排序。

例如:整数数据为 1,-3,6,-2,将负整数转化为正整数后得到 1,3,6,2,按数值从小到大排序后的结果为 1,2,3,6。

输入描述:

输入一行整数数据(-100≤整数≤100) ,整数之间以一个英文逗号隔开

输出描述:

输出一行整数数据,表示按照要求操作后的结果,整数之间以一个英文逗号隔开


样例输入:

1, -3, 6, -2

样例输出:

1, 2, 3, 6

参考答案:br />输入:1, -3, 6, -2输出:1, 2, 3, 6

解析:【喵呜刷题小喵解析】
首先,我们需要读取输入的整数数据,然后按照题目要求进行操作。

1. 将数据中的所有负整数转化为正整数。

在这个例子中,我们需要将-3转化为3,将-2转化为2。

2. 对转化后的数据进行从小到大排序。

在转化后的数据中,我们有1,3,6,2。我们需要按照从小到大的顺序进行排序,得到1,2,3,6。

最后,我们按照题目要求输出排序后的结果,整数之间以一个英文逗号隔开。

因此,输出结果为:1, 2, 3, 6。

9、编程实现:

假设果园中有 N (1≤N≤100)种水果。猴子想要采摘一些水果带回家,但猴子采摘水果的总重量不能超过 W(1≤W≤1000)。

已知每种水果的最大采摘数量 Ni (1≤Ni≤100)、每种水果单个的重量 Wi (1≤Wi≤100)以及每种水果单个的维生素含量 Vi (1≤Vi≤100)。

在采摘水果的总重量不超过 w 的情况下,猴子最多可以获得多少维生素。

例如:N=3,W=5,表示有 3 种水果,旦猴子采摘水果的总重量不能超过 5。

每种水果的最大采摘数量 Ni、每种水果单个的重量 Wi 及每种水果单个的维生素含量 Vi,如下表:

猴子可按以下方式采摘,获得最多的维生素:

1)采摘第一种水果 3 个,3 个水果的重量为 3,3 个水果维生素含量为 6;

2)采摘第二种水果 1 个,1 个水果的重量为 2,1 个水果维生素含量为 4;

水果总的维生素含量最多为 10 (10=6+4)。

输入描述:

第一行输入两个正整数 N (1≤N≤100)和 W (1≤W≤1000),分别表示水果的种类数和猴子最多可采摘的水果总重量,

两个正整数之间以一个空格隔开

接下来 N 行,每行输入三个正整数 Ni (1≤Ni≤100)和 Wi(1≤Wi≤100) 及 Vi (1≤Vis100),分别表示某种水果的最大

采摘数量和某种水果单个的重量及某种水果单个的维生素含量,正整数之间以一个空格隔开

输出描述:

输出一个整数,表示在不能超过水果总重量 w 的情况下,猴子最多能获得到的维生素值


样例输入:

3 5
4 1 2
1 2 4
2 4 5

样例输出:

10

参考答案:```pythonN, W = map(int, input().split())fruits = []for _ in range(N):Ni, Wi, Vi = map(int, input().split())fruits.append((Ni, Wi, Vi))vitamins = 0weight = 0for ni, wi, vi in fruits:for _ in range(min(ni, W // wi)):vitamins += viweight += wiW -= wiif weight > W:breakprint(vitamins)```

解析:【喵呜刷题小喵解析】:

本题是一道典型的01背包问题,可以使用动态规划来解决。

首先,我们定义一个二维数组dp,其中dp[i][j]表示在前i种水果中,采摘总重量不超过j的情况下,最多能获得的维生素含量。

然后,我们遍历每一种水果,对于每一种水果,我们遍历可能的采摘数量,更新dp数组。

具体地,对于第i种水果,我们遍历采摘数量为0到Ni,对于每一个采摘数量k,我们更新dp[i][j] = max(dp[i][j], dp[i-1][j-k*Wi] + k*Vi),表示在前i种水果中,采摘总重量不超过j的情况下,最多能获得的维生素含量。

最后,我们输出dp[N][W],表示在采摘总重量不超过W的情况下,最多能获得的维生素含量。

但是,由于本题中N和W的取值范围比较小,我们可以使用一维数组优化动态规划,将dp[i][j]简化为dp[j],表示采摘总重量不超过j的情况下,最多能获得的维生素含量。

具体地,我们遍历每一种水果,对于每一种水果,我们遍历可能的采摘数量,更新dp数组。

对于第i种水果,我们遍历采摘数量为0到Ni,对于每一个采摘数量k,我们更新dp[j] = max(dp[j], dp[j-k*Wi] + k*Vi),表示采摘总重量不超过j的情况下,最多能获得的维生素含量。

最后,我们输出dp[W],表示在采摘总重量不超过W的情况下,最多能获得的维生素含量。

以上就是本题的解题思路。

10、编程实现:

两名宇航员在探泰一个未知行星,行星上有-一 些障碍物,这些障碍物用数字 1 表示,没有障碍物用数字 0 表示。

行星被表示成一个 N*M 的矩阵。

探素过程中两名宇航员走散了。已知 A 宇航员的位置 (×1,y1)和 B 宇航员的位置(x2,y2),请你帮助 A 宇航员寻找一条最短路径到达 B 宇航员的位置,并输出最短路径的长度(不包括起点)。

注意:

1.x1、x2 表示矩阵的行号,y1、y2 表示矩阵的列号;

2.左上角的位置为(0,0);

3.A、B 宇航员的位置只能在数字 0 上;

4.有障碍物的位置不能通过。

例如:当 N=4, M=5, x1=1,y1=0, x2=3,y2=3,A 宇航员位置(1,0) ,B 宇航员位貴(3,3),矩阵表示如下:

A 宇航员到 B 宇航员有 2 条路径:

第 1 条路径(1,0) -> (0,0) ->(0,1)->(0,2) ->(1,2) -> (2,2)-> (2,3) -> (3,3),路径长度为 7;

第 2 条路径(1,0) ->(2, 0) -> (2,1)-> (2,2)->(2,3)-> (3,3),路径长度为 5:

其中最短路径长度为 5。

输入描述:

第一行包含两个正整数 N (1≤N≤20)和 M (1≤M≤20),分别表示矩阵的行数和列数,正整数之间—个空格隔开

接下来 N 行,每行包含 M 个数字 (0 或 1),0 表示行星上没有障碍物的位置,1 表示行星上有障碍物的位置,整数之间—个空格隔开

最后一行包含四个整数 x1 (0≤x1 <N) , y1 (0≤y1<M),x2(0≤x2<N), y2 (0≤y2<M), (x1, y1) 表示 A 宇航员的位置,(x2,y2)表示 B 宇航员的位置,整数之间一个空格隔开

输出描述:

输出一个整数,表示 A 宇航员到达 B 宇航员的最短路径长度。如果输入不符合要求,输出-2,如果无法到达,输出-1


样例输入:

4 5
0 0 0 0 0
0 1 0 1 0
0 0 0 0 1
0 1 1 0 0
1 0 3 3

样例输岀:

5

参考答案:```pythondef find_shortest_path(N, M, matrix, x1, y1, x2, y2):if x1 < 0 or x1 >= N or y1 < 0 or y1 >= M or x2 < 0 or x2 >= N or y2 < 0 or y2 >= M:return -2if matrix[x1][y1] == 1 or matrix[x2][y2] == 1:return -1queue = [(x1, y1, 0)]visited = set([(x1, y1)])directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]while queue:x, y, step = queue.pop(0)if x == x2 and y == y2:return stepfor dx, dy in directions:nx, ny = x + dx, y + dyif 0 <= nx < N and 0 <= ny < M and (nx, ny) not in visited and matrix[nx][ny] == 0:queue.append((nx, ny, step + 1))visited.add((nx, ny))return -1N, M = map(int, input().split())matrix = [list(map(int, input().split())) for _ in range(N)]x1, y1, x2, y2 = map(int, input().split())print(find_shortest_path(N, M, matrix, x1, y1, x2, y2))```

解析:【喵呜刷题小喵解析】:
这个问题可以通过广度优先搜索(BFS)来解决。我们可以从 A 宇航员的位置开始,在行星矩阵中按照上下左右四个方向搜索,同时记录下已经走过的位置。每当我们搜索到一个新的位置,我们会检查是否达到了 B 宇航员的位置。如果达到,则返回路径长度;如果没有达到,我们会将新位置加入到搜索队列中,并更新已访问的位置集合。

如果搜索完所有可能的位置都没有找到 B 宇航员,则返回 -1。在搜索过程中,我们需要检查输入的位置是否在矩阵范围内,以及 A 和 B 宇航员的位置是否在有障碍物的位置上。如果输入不符合要求,则返回 -2。

在 Python 中,我们可以使用队列(queue)来存储待搜索的位置,使用集合(set)来存储已访问的位置,使用元组(tuple)来表示位置。在搜索过程中,我们按照广度优先的顺序搜索位置,即先搜索相邻的位置,再搜索更远的位置。

以上代码实现了广度优先搜索的算法,其中 `find_shortest_path` 函数用于找到最短路径长度。输入的位置通过 `input()` 函数读取,矩阵通过 `input().split()` 函数分割成行,每行再分割成列。最后,我们调用 `find_shortest_path` 函数并打印结果。

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:第14届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2023年3月12日真题答案及解析

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share