image

编辑人: 浅唱

calendar2025-06-16

message2

visits747

第15届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2024年1月28日真题答案及解析

一、单选题

1、下列哪个是赋值运算符?(   )

A =

B !=

C ==

D  //

解析:【喵呜刷题小喵解析】:赋值运算符用于将右侧的值赋给左侧的变量。在选项中,只有"="是赋值运算符,表示将右侧的值赋给左侧的变量。其他选项"!=","=="和"//"都不是赋值运算符。因此,正确答案是A。

2、Python 中定义函数的关键字是(   )。

A class

B import

C def

D while

解析:【喵呜刷题小喵解析】:在Python中,定义函数的关键字是"def"。这个关键字用于声明一个新的函数,后面通常会跟着函数名、参数列表以及函数体。其他选项如"class"、"import"和"while"在Python中都有其特定的用途,但并不是用于定义函数的。其中,"class"用于定义类,"import"用于导入模块或对象,"while"用于创建循环结构。因此,正确答案是C选项。

3、Python 中可以创建空字典的是(   )。

A dic = ()

B dic = {}

C dic = set()

D dic = []

解析:【喵呜刷题小喵解析】:在Python中,要创建一个空字典,需要使用花括号{},而不是使用圆括号()、方括号[]或set()。所以选项B "dic = {}"是正确的。

4、已知:s = 'pythonnohtyp',执行 print(s.index('h') + s.rindex('n')) 语句后,输出的结果是(   )。

A -2

B -3

C 9

D 11

解析:【喵呜刷题小喵解析】:在Python中,字符串的索引是从0开始的。`s.index('h')`会返回字符'h'在字符串s中第一次出现的位置,即索引值。同样地,`s.rindex('n')`会返回字符'n'在字符串s中最后一次出现的位置,即索引值。由于字符串s为'pythonnohtyp',字符'h'第一次出现的位置是索引7,字符'n'最后一次出现的位置是索引10。因此,`s.index('h') + s.rindex('n')`的结果为7 + 10 = 17。但是,由于Python字符串的索引是从0开始的,所以实际的索引值需要减1。因此,`s.index('h') + s.rindex('n') - 1`的结果为17 - 1 = 16。但是题目中要求输出的是`s.index('h') + s.rindex('n')`,所以输出的结果是17。然而,题目中给出的选项并没有17这个选项,可能是题目或者选项出错了。如果按照题目和选项的内容,我们应该假设实际的代码是`print(s.index('h') + s.rindex('n') - 1)`,那么正确的输出应该是11。因此,正确答案是D,即11。

5、已知 a = {1, 2, 3, 4, 5},b = {2, 3, 4, 5, 6}。下列选项中可以获得集合 {1, 6} 的是(   )。

A、

(a & b) | (a - b)

B、

(a | b) | (a - b)

C、

(a - b) & (b - a)

D、

(a | b) - (b & a)

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

首先,我们明确题目中给出的集合a和集合b:
a = {1, 2, 3, 4, 5}
b = {2, 3, 4, 5, 6}

然后,我们分析每个选项:

(a & b) | (a - b):
(a & b)表示集合a和集合b的交集,即{2, 3, 4, 5}。
(a - b)表示集合a中但不在集合b中的元素,即{1}。
所以,(a & b) | (a - b) = {1, 2, 3, 4, 5}。

(a | b) | (a - b):
(a | b)表示集合a和集合b的并集,即{1, 2, 3, 4, 5, 6}。
(a - b)表示集合a中但不在集合b中的元素,即{1}。
所以,(a | b) | (a - b) = {1, 2, 3, 4, 5, 6}。

(a - b) & (b - a):
(a - b)表示集合a中但不在集合b中的元素,即{1}。
(b - a)表示集合b中但不在集合a中的元素,即{6}。
所以,(a - b) & (b - a) = { },空集。

(a | b) - (b & a):
(a | b)表示集合a和集合b的并集,即{1, 2, 3, 4, 5, 6}。
(b & a)表示集合b和集合a的交集,即{2, 3, 4, 5}。
所以,(a | b) - (b & a) = {1, 6}。

综上,只有选项D可以得到集合{1, 6}。

二、实操题

6、n 的立方

提示信息:

整数 n 的立方 = n × n × n。

编程实现:

给定一个整数 n,计算 n 的立方。

例如:n = 2,2 的立方等于 8 (8 = 2 × 2 × 2)。

输入描述:

输入一个整数 n(1≤n≤1000)

输出描述:

输出一个整数,表示 n 的立方


样例输入:

2

样例输出:

8

参考答案:根据题目要求,我们需要编写一个程序来计算整数 n 的立方。输入是一个整数 n(1≤n≤1000),输出是一个整数,表示 n 的立方。

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

这个问题是一个简单的数学运算问题,可以通过编程实现。根据题目提示,整数 n 的立方等于 n × n × n。因此,我们可以编写一个程序,输入一个整数 n,然后计算 n 的立方并输出结果。

具体的实现方式取决于使用的编程语言。在 Python 中,可以使用以下代码实现:


```python
n = int(input())
result = n * n * n
print(result)
```
在这个程序中,首先使用 `input()` 函数从标准输入中读取一个整数 n,然后使用 `int()` 函数将输入的字符串转换为整数类型。接着,使用乘法运算符 `*` 计算 n 的立方,并将结果存储在变量 `result` 中。最后,使用 `print()` 函数将结果输出到标准输出中。

需要注意的是,在输入和输出时,需要使用适当的函数和语法,以确保程序能够正确地读取和输出数据。同时,还需要注意程序的健壮性,例如对输入数据进行合法性检查等。

7、找第二大的数

编程实现:

给定三个互不相同的整数,找出其中第二大的数。

例如:三个整数分别为 30、20、25,其中第二大的数是 25。

输入描述:

输入共三行,每行一个整数(1≤整数≤1000),三个整数互不相同

输出描述:

输出一个整数,表示三个整数中第二大的数


样例输入:

30
20
25

样例输出:

25

参考答案:br />```python# 读取输入a = int(input())b = int(input())c = int(input())# 找出第二大的数second_largest = max(min(a, b), min(a, c))if second_largest == a:second_largest = max(b, c)else:second_largest = a# 输出结果print(second_largest)```

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

首先,我们需要读取输入的三个整数。然后,我们可以使用Python的内置函数`max()`和`min()`来找出第二大的数。具体步骤如下:

1. 首先,我们找出最小的两个数。
2. 然后,我们比较这两个数,看看哪一个更大。
3. 如果最小的两个数中的较大数是a,那么第二大的数就是b和c中的较大数。
4. 如果最小的两个数中的较大数不是a,那么第二大的数就是a。

最后,我们输出第二大的数。

8、摆放箱子

编程实现:

工人需要将 n 个边长为 1 的正方体箱子整齐地摆放在长度为 L,宽度为 1 的区域。要求每一层摆满 L 个箱子后,

才能往上一层摆放。

请计算 n 个箱子可以放多少层(最上层只要有箱子就算作一层),以及最上层有几个箱子。

例如:n = 8,L = 3,将 8 个箱子摆放在长度为 3,宽度为 1 的区域,可以放 3 层,最上层有 2 个箱子。

输入描述:

第一行输入一个整数 n(1≤n≤100),表示箱子数量

第二行输入一个整数 L(1≤L≤100),表示区域的长度

输出描述:

输出两个整数,分别表示 n 个箱子可以放多少层以及最上层有几个箱子,整数之间以一个空格隔开


样例输入:

8
3

样例输出:

3 2

参考答案:3 2

解析:【喵呜刷题小喵解析】:
这是一个简单的编程问题,需要根据给定的箱子数量和区域长度来计算箱子可以摆放的层数以及最上层箱子的数量。

首先,我们需要理解题目中的要求:每一层摆满L个箱子后,才能往上一层摆放。因此,我们可以计算出每一层可以摆放的箱子数量,然后看n个箱子可以摆放多少层。

具体步骤如下:

1. 计算每一层可以摆放的箱子数量,即L个。
2. 计算n个箱子可以摆放多少层,即n除以L的商。
3. 计算最上层箱子的数量,即n除以L的余数。

根据题目中的例子,n=8,L=3,每一层可以摆放3个箱子,因此可以摆放3层,最上层有2个箱子。

对于输入,第一行输入一个整数n,表示箱子数量,第二行输入一个整数L,表示区域的长度。

对于输出,输出两个整数,分别表示n个箱子可以放多少层以及最上层有几个箱子,整数之间以一个空格隔开。

在样例输入中,n=8,L=3,因此输出为3 2,表示可以放3层,最上层有2个箱子。

9、数字塔

提示信息:

数字塔:是由若干个正六边形搭建的一个 n 层的塔,其中每个正六边形中都有一个整数,正六边形和整数的

排列规律如下:

第 n 层的整数从左到右为 1、2、3......n

编程实现:

给定一个整数 n,根据提示信息中数字塔的规律,请计算 n 层数字塔中所有整数的和。

例如: n = 4,4 层的数字塔如下:

所有正六边形中的整数为 1、1、2、1、2、3、1、2、3、4;

所有整数的和为 20。

输入描述:

输入一个整数 n(1≤n≤100),表示数字塔的层数

输出描述:

输出一个整数,表示 n 层的数字塔中所有整数的和


样例输入:

4

样例输出:

20

参考答案:根据题目描述,我们需要计算数字塔中所有整数的和。数字塔是由若干个正六边形搭建的,每个正六边形中都有一个整数,整数的排列规律是从1开始递增。首先,我们需要明确数字塔的结构。数字塔的第n层有n个正六边形,每个正六边形中的整数从左到右为1、2、3......n。要计算数字塔中所有整数的和,我们可以按照以下步骤进行:1. 初始化一个变量sum,用于存储整数的和,初始值为0。2. 对于每一层数字塔,从1到n遍历每个正六边形中的整数,将其累加到sum中。3. 返回sum作为结果。

解析:【喵呜刷题小喵解析】:
本题是一道关于数字塔的问题,要求计算给定层数的数字塔中所有整数的和。根据题目描述,数字塔是由若干个正六边形搭建的,每个正六边形中都有一个整数,整数的排列规律是从1开始递增。

为了解决这个问题,我们可以使用循环遍历每一层的正六边形,并将每个正六边形中的整数累加到sum中。具体的算法步骤如下:

1. 初始化一个变量sum,用于存储整数的和,初始值为0。
2. 对于每一层数字塔,从1到n遍历每个正六边形中的整数,将其累加到sum中。
3. 返回sum作为结果。

这种方法的时间复杂度是O(n^2),其中n是数字塔的层数。因为我们需要遍历每一层的正六边形,每个正六边形中的整数从1到n。虽然这种方法的时间复杂度不是最优的,但对于题目中给定的范围(1≤n≤100),它仍然可以在合理的时间内得到结果。

在编程实现时,我们可以使用循环来遍历每一层的正六边形,并将每个正六边形中的整数累加到sum中。最后,返回sum作为结果。具体的实现细节取决于所使用的编程语言和环境。

10、输出字符串

编程实现:

小蓝用仅包含小写字母的字符串表示整数,规则如下:

给定一个整数 n,输出 n 对应的字符串。

例如:n = 28,28 对应的字符串为 ab。

输入描述:

输入一个整数 n(1≤n≤108)

输出描述:

输出一个字符串,表示 n 对应的字符串


样例输入:

28

样例输出:

ab

参考答案:```pythondef get_string(n):result = ""while n > 0:n, remainder = divmod(n, 26)result = chr(ord('a') + remainder) + resultreturn resultn = int(input())print(get_string(n))```

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

首先,我们需要理解题目中的规则。小蓝用仅包含小写字母的字符串表示整数,规则是:将整数 n 转换为 n 位的二进制数,然后从左到右扫描这个二进制数,将每个位的值(0或1)转换为对应的字母(a 对应 0,b 对应 1,以此类推)。

因此,我们可以编写一个函数 `get_string(n)` 来实现这个转换。在这个函数中,我们使用一个循环来将整数 n 转换为对应的字符串。在每次循环中,我们使用 `divmod(n, 26)` 来获取 n 除以 26 的商和余数,然后将余数转换为对应的字母,并将其添加到结果字符串的开头。最后,我们将 n 更新为商,以便在下次循环中继续处理。

在主程序中,我们首先使用 `input()` 函数从标准输入中读取一个整数 n,然后调用 `get_string(n)` 函数将其转换为对应的字符串,并使用 `print()` 函数将结果输出到标准输出中。

注意,由于题目中规定的输入范围是 1≤n≤108,因此我们需要在程序中添加一些输入检查,以确保输入的值在这个范围内。在这个问题中,由于输入是整数,我们可以直接使用 `int(input())` 来读取输入,而不需要进行额外的输入检查。

11、密码锁

提示信息:

密码锁:由 n 个从左到右并排的圆环组成,每个圆环上都有 10 个数字(0~9),蓝色框内为密码显示区,每个圆环在密码显示区只能显示一个数字,如图所示。可以拨动圆环,来改变密码显示区显示的数字。

当密码显示区的数字与密码一致时,密码锁就会被打开。

编程实现:

有一个由 n 个圆环组成的密码锁,和一个 n 位的密码 S(S 由 1~9 中的数字(包含 1 和 9)组成)。每次操作只能选择一个或位置连续的多个圆环拨动。当 S 中的字符从左到右依次显示在密码显示区时,密码锁会被打开。

已知每个圆环在密码显示区初始数字都为 0,请计算最少需要操作多少次,才能打开密码锁。

注意:

1、如果选择了其中一个圆环,可将该圆环中任意一个数字拨动到密码显示区,表示 1 次操作;

例如:将第 3 个圆环拨动到数字 4,表示 1 次操作:

2、如果选择了位置连续的多个圆环,只能将这些圆环拨动成同一个数字,显示在密码显示区,表示 1 次操作。

例如:将连续的第 2 个到第 3 个圆环都拨动到数字 5,表示 1 次操作:

例如:n = 5,S = "12321";分别表示 5 个圆环组成的密码锁和密码 12321;将 5 位密码 1、2、3、2、1从左到右依次显示在密码显示区,以下是操作次数最少的方案:

第一次操作,将 5 个初始状态为 0 的圆环全部拨动到数字 1:

第二次操作,将第 2 个到第 4 个圆环全部拨动到数字 2:

第三次操作,将第 3 个圆环拨动到数字 3:

最少需要操作 3 次,才能打开密码锁。

输入描述:

第一行输入一个整数 n(1≤n≤100),表示组成的密码锁的圆环数及密码的位数

第二行输入一个长度为 n 的字符串 S,S 由 1~9 中的数字(包含 1 和 9)组成,表示密码

输出描述:

输出一个整数,表示最少需要操作多少次,才能打开密码锁


样例输入:

5
12321

样例输出:

3

参考答案:根据题目描述,我们需要计算最少需要操作多少次,才能打开密码锁。首先,我们需要遍历密码S中的每个字符,对于每个字符,我们需要找到密码显示区中需要拨动的圆环,并将这些圆环拨动到当前字符。对于每个字符,我们需要找到所有需要拨动的圆环,这可以通过比较密码S中的当前字符和密码显示区中对应位置的字符来实现。如果密码显示区中对应位置的字符为0,则需要拨动该位置的圆环。然后,我们需要计算需要拨动的圆环数,这可以通过遍历密码S中的每个字符,并计算需要拨动的圆环数来实现。如果当前字符和上一个字符相同,则只需要拨动当前位置的圆环;否则,需要拨动从上一个不同字符的位置到当前位置的所有圆环。最后,我们将所有需要拨动的圆环数相加,即可得到最少需要操作多少次,才能打开密码锁。

解析:【喵呜刷题小喵解析】:
本题是一道经典的动态规划问题,可以通过遍历密码S中的每个字符,并计算需要拨动的圆环数来实现。

首先,我们需要将密码显示区中的所有圆环都拨动到数字0,这可以通过一次操作完成。

然后,我们遍历密码S中的每个字符,对于每个字符,我们需要找到需要拨动的圆环,并将这些圆环拨动到当前字符。对于每个字符,我们需要找到所有需要拨动的圆环,这可以通过比较密码S中的当前字符和密码显示区中对应位置的字符来实现。如果密码显示区中对应位置的字符为0,则需要拨动该位置的圆环。

在遍历密码S中的每个字符时,我们需要记录需要拨动的圆环数,这可以通过使用一个变量来记录已经拨动的圆环数,并在需要拨动圆环时将其加1。

最后,我们将所有需要拨动的圆环数相加,即可得到最少需要操作多少次,才能打开密码锁。

需要注意的是,在遍历密码S中的每个字符时,我们需要特别处理密码S中的每个字符和上一个字符相同的情况。如果当前字符和上一个字符相同,则只需要拨动当前位置的圆环;否则,需要拨动从上一个不同字符的位置到当前位置的所有圆环。这是因为,如果当前字符和上一个字符相同,那么密码显示区中对应位置的字符已经为当前字符,不需要再次拨动。

因此,我们可以使用动态规划的思想,通过遍历密码S中的每个字符,并计算需要拨动的圆环数,来求解最少需要操作多少次,才能打开密码锁。

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

创作类型:
原创

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

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