image

编辑人: 未来可期

calendar2025-06-15

message2

visits385

第14届蓝桥杯Python青少组_省赛_中级组_2023年5月14日真题答案及解析

一、单选题

1、执行以下代码,输出的结果是 (  ) 。

lst = "abc"

print(lst+lst)

A abcabc

B abc

C lst+lst

D abc+abc

解析:【喵呜刷题小喵解析】:在这个代码中,变量`lst`被赋值为字符串`"abc"`。然后执行`print(lst+lst)`,字符串`"abc"`和自身相加,即`"abc" + "abc"`,输出的结果是`"abcabc"`。因此,正确答案是A选项。其他选项都不符合代码的实际执行结果。

2、导入random标准库,执行print(random.randrange(2,20,2)语句,可能输出的结果是 (  )

A 2

B 5

C 13

D 20

解析:【喵呜刷题小喵解析】:在Python中,`random.randrange()`函数用于生成一个指定范围内的随机整数。该函数的语法是`random.randrange([start], stop[, step])`,其中start是起始值(包含),stop是结束值(不包含),step是步长。在这个题目中,`random.randrange(2,20,2)`表示生成一个大于等于2且小于20的偶数。因此,可能输出的结果有4、6、8、10、12、14、16、18。所以选项C(13)是一个可能的结果。

3、以下关于Python中复数描述,错误的是 (  )

A 复数可以看作二元有序浮点数(x,y)

B 实部和虚部都是浮点数

C 虚数部分的后缀可以是“j”也可以是 “J”

D 已知复数a,可以使用real获得虚数部分

解析:【喵呜刷题小喵解析】:在Python中,复数确实可以看作二元有序浮点数(x,y),其中x是实部,y是虚部,所以选项A是正确的。复数的实部和虚部都是浮点数,所以选项B也是正确的。虚数部分的后缀可以是“j”也可以是 “J”,所以选项C也是正确的。但是,选项D是错误的,因为在Python中,已知复数a,应该使用a.imag来获取虚数部分,而不是使用real。因此,选项D是错误的。

4、下列选项哪一个是转为整数的函数? (  )

A str()

B int()

C float()

D list()

解析:【喵呜刷题小喵解析】:在Python中,`int()`函数用于将数值转换为整数。`str()`函数用于将对象转换为字符串,`float()`函数用于将数值转换为浮点数,`list()`函数用于将对象转换为列表。因此,只有`int()`函数能将数值转换为整数。所以正确答案是B。

5、执行以下代码,输出的结果是 (  ) 。

age={16,18,7}

print(type(sorted(age)))

A <class ‘set’>

B <class ‘int’>

C <class ‘str’>

D <class ‘list’>

解析:【喵呜刷题小喵解析】:Python的sorted函数用于对可迭代对象(例如列表)进行排序。给定代码中的age是一个列表,因此sorted(age)将返回一个新的已排序的列表。print函数用于输出对象的类型,因此print(type(sorted(age)))将输出排序后的列表的类型,即<class ‘list’>。因此,正确选项为D。

二、实操题

6、题目描述:(注.input()输入函数的括号中不允许添加任何信息)

编程实现:

给定一个正整数N,计算出N+N的值。

例如:N = 4,4+4的值为8(8=4+4)。

输入描述

输入一个正整数N

输出描述

输出N+N的值


样例输入

3

样例输出

6


参考答案:```pythonN = int(input())result = N + Nprint(result)```

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

首先,我们需要从用户那里获取一个正整数N。在Python中,我们可以使用`input()`函数来获取用户的输入。但是,`input()`函数返回的是一个字符串,所以我们需要使用`int()`函数将其转换为整数。

然后,我们可以计算N+N的值,并将结果存储在变量`result`中。

最后,我们可以使用`print()`函数将结果输出到屏幕上。

因此,完整的Python代码如上述所示。

7、题目描述:(注.input()输入函数的括号中不允许添加任何信息)

编程实现:

给定一个只包含小写字母的字符串S(S长度≥3),请输出字符串S的第一个字符和最后一个字符。

例如:

当S =“abc”,abc的第一个字符为a,最后一个字符为c,故输出ac。

输入描述

输入一个只包含小写字母的字符串S(S长度≥3)

输出描述

输出字符串S的第一个字符和最后一个字符,两个字符之间没有空格及其他字符


样例输入

abc

样例输出

ac

参考答案:根据题目要求,我们需要输出字符串S的第一个字符和最后一个字符,两个字符之间没有空格及其他字符。

解析:【喵呜刷题小喵解析】:
首先,我们需要读取用户输入的字符串S。由于题目中明确提到输入函数的括号中不允许添加任何信息,因此我们可以直接读取用户输入的字符串。

然后,我们可以使用字符串的索引来获取字符串的第一个字符和最后一个字符。在Python中,字符串的索引从0开始,因此第一个字符的索引为0,最后一个字符的索引为-1。

最后,我们将第一个字符和最后一个字符拼接在一起,形成一个新的字符串,输出即可。

根据题目给出的样例输入和样例输出,我们可以编写如下的Python代码来实现这个需求:


```python
S = input()
first_char = S[0]
last_char = S[-1]
output = first_char + last_char
print(output)
```
在这个代码中,我们首先使用`input()`函数读取用户输入的字符串S,然后使用字符串的索引获取第一个字符和最后一个字符,最后将两个字符拼接在一起,使用`print()`函数输出即可。

8、题目描述:(注.input()输入函数的括号中不允许添加任何信息)

提示信息:

合数:合数指自然数中除了能被1和本身整除外,还能被其它正整数整除的数。

例如4,4除了能被1和4整除,还可以被2整除。

编程实现:

小明收藏了N(2≤N≤25)个数字币,每个数字币上都有一个面值(面值可以重复)。从数字币中任选K(2≤K≤N)个,有多种选法,请将每次选择的数字币上的面值累加,然后解决以下两个问题。

问题1:累加的和中有多少种不同的结果;

问题2:累加的和中有多少个不同的合数。

例如:N=5,K=3,5个数字币上的面值分别为2、1、4、5、3,任选3个数字币,有10种选法,将每种选法上的面值累加:

2+1+4=7、2+1+5=8、2+1+3=6、2+4+5=11、2+4+3=9、2+5+3=10、1+4+5=10、1+4+3=8、1+5+3=9、4+5+3=12。

其中累加的和中有7种不同的结果,分别是7、8、6、11、9、10、12,

累加的和中有5个不同的合数,分别是8、6、9、10、12。

输入描述

第一行输入一个正整数N(2≤N≤25),表示数字币的个数

第二行输入N个正整数(1≤正整数≤1000),表示数字币上的面值,正整数之间以一个英文逗号隔开

第三行输入一个正整数K(2≤K≤N),表示所要选取的数字币个数

输出描述

输出两个整数,分别表示累加的和中不同结果的个数以及累加的结果中不同合数的个数,两个整数之间以一个英文逗号隔开


样例输入

5
2,1,4,5,3
3

样例输出

7,5

参考答案:首先,我们需要读入数字币的个数N、数字币的面值以及要选取的数字币个数K。然后,使用回溯法生成所有可能的选取方式,并计算累加结果中不同结果的个数以及累加结果中不同合数的个数。

解析:【喵呜刷题小喵解析】:
本题是一道组合数学和编程题,需要用到回溯法来生成所有可能的选取方式,并计算累加结果中不同结果的个数以及累加结果中不同合数的个数。

具体实现步骤如下:

1. 读入数字币的个数N、数字币的面值以及要选取的数字币个数K。

2. 使用回溯法生成所有可能的选取方式,并计算累加结果中不同结果的个数。具体实现可以使用一个哈希表来存储已经出现过的累加结果,每生成一个选取方式,将其累加结果存入哈希表中,最后返回哈希表的长度即为累加结果中不同结果的个数。

3. 对于累加结果中每个结果,判断其是否为合数。可以使用一个哈希表来存储已经出现过的合数,每生成一个选取方式,将其累加结果存入哈希表中,如果累加结果已经出现过,则跳过;否则,判断其是否为合数,如果是合数,则将其存入合数哈希表中。最后返回合数哈希表的长度即为累加结果中不同合数的个数。

注意,在判断一个数是否为合数时,可以预先计算出一个数范围内的所有素数,然后判断该数是否可以被这些素数整除。在本题中,由于数字币的面值最大为1000,因此可以预先计算出1000以内的所有素数,然后判断累加结果是否可以被这些素数整除。

最后,将累加结果中不同结果的个数和累加结果中不同合数的个数输出即可。

9、题目描述:(注.input()输入函数的括号中不允许添加任何信息)

提示信息:

杨辉三角就是一个用数排列起来的三角形(如下图),杨辉三角规则如下:

1)每行第一个数和最后一个数都为1,其它每个数等于它左上方和右上方的两数之和;

2)第n行有n个数。

注意:“列”指的是如图所标注的斜列。

编程实现:

小青对杨辉三角的特点和规律研究得很明白,现要考察你对杨辉三角的熟悉程度,首先告知你这是一个N行的杨辉三角,然后又告知了两个数值X和Y(X表示第几行,Y表示第几列),让你根据杨辉三角的特点和观察到的规律解决以下两个问题。

1)第X行第Y列对应的数是多少;

2)求出N行的杨辉三角中第Y列中所有数的和。

例如:N=5,5行的杨辉三角如下图:

X=5,Y=3,第5行第3列对应的数为6;第3列中所有数的和为10(10 = 6 + 3 + 1)。

输入描述

第一行输入一个正整数N(2≤N≤30),表示杨辉三角的行数

第二行输入两个正整数X和Y(1≤Y≤X≤N),分别表示第X行和第Y列,正整数之间以一个英文逗号隔开

输出描述

输出两个整数,分别表示N行的杨辉三角中第X行Y列对应的数,及第Y列上所有数的和,两个整数之间以一个英文逗号隔开


样例输入

5
5,3

样例输出

6,10

参考答案:输入N=5,X=5,Y=3输出6,10

解析:【喵呜刷题小喵解析】:
根据题目描述,杨辉三角是一个用数排列起来的三角形,每行第一个数和最后一个数都为1,其它每个数等于它左上方和右上方的两数之和。

对于第一个问题,要求第X行第Y列对应的数。根据杨辉三角的规则,我们可以使用递归或者动态规划的方式计算。这里我们使用动态规划的方式,定义一个二维数组dp,dp[i][j]表示第i行第j列的数。初始化dp[1][1]=1,然后按照杨辉三角的规则填充dp数组。最后返回dp[X][Y]即可。

对于第二个问题,要求求出N行的杨辉三角中第Y列中所有数的和。我们可以遍历第Y列,将每个数累加到sum变量中,最后返回sum即可。

根据题目给出的样例输入,N=5,X=5,Y=3,我们可以计算出第5行第3列对应的数为6,第3列中所有数的和为10,因此输出6,10。

10、题目描述:

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

编程实现:

工人砌了一面奇特的砖墙,该墙由N列砖组成(1≤N≤106),且每列砖的数量为Ki(1≤Ki≤104,相邻两列砖之间无缝隙),每块砖的长宽高都为1。

小蓝为了美化这面墙,需要在这面墙中找到一块面积最大的矩形用于涂鸦,那么请你帮助小蓝找出最大矩形,并输出其面积。

例如:N = 6,表示这面墙有6列,每列砖的数量依次为3、2、1、5、6、2,如下图:

图中虚线部分是一块面积最大的矩形,其面积为10。

输入描述

第一行输入一个正整数N(1≤N≤10^6),表示这面砖墙由几列砖组成

第二行输入N个正整数Ki(1≤Ki≤10^4),表示每列砖的数量,正整数之间以一个空格隔开

输出描述

输出一个正整数,表示最大矩形的面积


样例输入

6
3 2 1 5 6 2

样例输出

10

参考答案:```pythonN = int(input())K = list(map(int, input().split()))heights = [0] * 10001max_height = 0max_area = 0for i in range(N):for j in range(K[i], 0, -1):heights[j] = max(heights[j], heights[j-1] + 1)max_area = max(max_area, j * heights[j])max_height = max(max_height, heights[j])print(max_area)```

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

本题是一道经典的动态规划问题,可以使用单调栈来解决。

首先,我们定义一个长度为10001的数组heights,用来表示高度,初始值为0。数组的下标对应每块砖的数量,数组的值对应该数量的砖堆的高度。

然后,我们遍历每一列砖,对于每一列砖,我们遍历其数量从多到少,更新heights数组的值。具体地,对于每个数量j,我们更新heights[j]为heights[j-1]+1和heights[j]的较大值,表示以第j块砖为底边的矩形的高度。同时,我们更新最大面积max_area为max_area和j*heights[j]的较大值,表示以第j块砖为底边的矩形的面积。

最后,我们输出最大面积max_area即可。

由于题目要求输入函数的括号中不允许添加任何信息,因此我们使用input()函数来获取输入,并使用map()函数将输入的字符串转换为整数列表。

注意,由于题目中砖的数量最大为10000,因此我们定义heights数组的长度为10001,以便处理数量为0的情况。

11、题目描述:

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

编程实现:

在一个神奇空间里有N个房间,房间从1到N编号,每个房间可能有一个或多个传送门,每个传送门都有一个编号,如果相同编号的传送门同时出现在多个房间中,表示这些房间可以互通。

给定两个房间的编号A和B,请找出从房间A到达房间B最少需要经过几个传送门。

例如:N=3,3个房间中传送门的编号分别为:

房间1:1、4、6;

房间2:2、3、4,8;

房间3:3、6、9。

其中房间1和房间2互通,共用4号传送门;房间1和房间3互通,共用6号传送门;房间2和房间3互通,共用3号传送门;当A=1,B=2,从房间1到达房间2,共有两种路线:

路线1:从房间1通过4号传送门进入房间2,共经过1个传送门;

路线2:从房间1通过6号传送门进入房间3,再从房间3通过3号传送门进入房间2,共经过2个传送门;故从房间1到达房间2最少需要经过1个传送门。

输入描述

第一行输入一个正整数N(2≤N≤20),表示房间数量

接下来输入N行,每行包含多个正整数(1≤正整数≤100),第2行到第N+1行依次表示1到N号房间内所有传送门的编号,正整数之间以一个英文逗号隔开

最后一行输入两个正整数A和B(1≤A≤N,1≤B≤N,且A≠B),表示两个房间的编号,正整数之间以一个英文逗号隔开

输出描述

输出一个整数,表示从房间A到达房间B最少需要经过几个传送门,如果房间A不能到达房间B,则输出-1


样例输入

3
1,4,6
2,3,4,8
3,6,9
1,2

样例输出

1

参考答案:```pythonN = int(input())rooms = [list(map(int, input().split(','))) for _ in range(N)]A, B = map(int, input().split(','))# 使用字典来记录每个房间能够到达的房间reachable = i: [] for i in range(1, N+1)# 深度优先搜索def dfs(room, path):for door in rooms[room-1]:if door not in path:path.append(door)if door == B:return len(path)for i in range(1, N+1):if door in rooms[i-1]:if i not in reachable[room]:reachable[room].append(i)if i not in reachable[door]:reachable[door].append(i)path.pop()min_steps = min(dfs(i, path) for i in reachable[room] if i != room)if min_steps != float('inf'):return min_steps + 1return float('inf')min_steps = dfs(A, [])if min_steps == float('inf'):print(-1)else:print(min_steps)```

解析:【喵呜刷题小喵解析】:
这个问题可以通过深度优先搜索(DFS)来解决。首先,我们构建一个字典 `reachable` 来记录每个房间能够到达的房间。然后,我们进行DFS遍历,从房间A开始,每经过一个传送门,我们将其添加到路径中,并检查是否到达了房间B。如果到达了,我们返回路径的长度,即经过的传送门数量。如果未到达,我们遍历所有与当前房间和当前传送门相连的房间,并将它们添加到 `reachable` 字典中。然后,我们递归地调用DFS,从可达的房间开始,直到找到到达房间B的最短路径。如果DFS无法到达房间B,则返回无穷大。最后,我们检查 `min_steps` 是否为无穷大,如果是,则输出-1,否则输出 `min_steps`。

注意,由于题目要求输入函数的括号中不允许添加任何信息,因此我们在代码中直接使用了 `input()` 函数来获取输入。

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

创作类型:
原创

本文链接:第14届蓝桥杯Python青少组_省赛_中级组_2023年5月14日真题答案及解析

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