image

编辑人: 桃花下浅酌

calendar2025-05-21

message4

visits495

第12届蓝桥杯Python青少组_国赛_中/高级组_2021年5月真题答案及解析

一、单选题

1、设s='Hi LanQiao',运行以下哪个选项代码可以输出“LanQiao”子串()。

A print(s[-7:])

B print(s[-6:-1])

C print(s[-7:0])

D print(s[-7:-1])

解析:【喵呜刷题小喵解析】在Python中,字符串的切片操作可以提取子串。切片操作的一般形式是`s[start:end]`,其中`start`是开始索引(包含),`end`是结束索引(不包含)。在本题中,字符串`s`是`'Hi LanQiao'`,我们要提取的是`'LanQiao'`子串。选项B的`print(s[-6:-1])`会从字符串的倒数第6个字符开始,到倒数第1个字符结束,即提取`'LanQiao'`子串。因此,正确答案是B。

2、已知a=2021.0529,运行以下哪个选项代码可以输出“2021.05”()。

A print('{.2f}'.format(a))

B print('{:.2f}'.format(a))

C print('{.2}'.format(a))

D print('{2}'.format(a))

解析:【喵呜刷题小喵解析】:在Python中,字符串格式化用于控制字符串的输出格式。在给出的选项中,A、B和C选项都使用了字符串格式化,但格式字符串的写法有所不同。

A选项:`print('{.2f}'.format(a))`
这个选项中的格式字符串`{.2f}`是不正确的。正确的格式字符串应该是`{:.2f}`,其中`.`后面的数字`2`表示小数点后保留两位,`f`表示浮点数。

B选项:`print('{:.2f}'.format(a))`
这个选项中的格式字符串`{:.2f}`是正确的。它会将浮点数`a`格式化为保留两位小数的形式,输出结果为"2021.05"。

C选项:`print('{.2}'.format(a))`
这个选项中的格式字符串`{.2}`是不正确的。它没有指定浮点数格式,而且`{.2}`这种写法在Python中是不被识别的。

D选项:`print('{2}'.format(a))`
这个选项中的格式字符串`{2}`是不正确的。它试图引用位置参数,但给出的参数只有一个`a`,并且没有提供位置参数。

因此,正确答案是B选项,它会输出"2021.05"。

3、已知pi=3.1415926,运行print(round(pi),round(pi,2))语句,输出的结果是()。

A 3 3.14

B 2 4

C 3 6.18

D 3.14 3

解析:【喵呜刷题小喵解析】
首先,根据题目给出的信息,我们知道pi的近似值为3.1415926。

接下来,我们来看`round(pi)`。round函数的作用是对给定的数值进行四舍五入。因为pi的近似值是3.1415926,所以round(pi)的结果应该是3。

然后,我们看`round(pi,2)`。round函数的第二个参数表示保留的小数位数。所以,round(pi,2)的意思是保留pi的小数点后两位,即3.14。

最后,根据以上分析,`print(round(pi),round(pi,2))`输出的结果应该是3 3.14。所以,正确答案是A选项。

4、运行以下程序,输出的结果是()。

d={'Beijing':'China','Washington':'America','Ottawat':'Canadian'}

print(max(d),min(d))

A Washington Ottawa

B Canadian China

C America China 

D Washington Beijing

解析:【喵呜刷题小喵解析】:题目中定义了一个字典`d`,字典中的键是字符串,对应的值是字符串。`max()`函数和`min()`函数在字典中默认按照键进行比较。在这个例子中,字典的键是'Beijing', 'Washington', 'Ottawat'(注意拼写错误,应为'Ottawa')。按照字典的键进行比较,'Washington'是最大的,对应的值是'America','Ottawat'(注意拼写错误)是最小的,但是由于字典中没有这个键,`min()`函数会抛出`KeyError`异常,所以`min()`函数实际并没有输出任何内容。而`max()`函数输出的是'Washington',对应的值是'America'。因此,输出的结果是`America China`。选项C与此相符。

5、如果p=ord('b'),运行print(p,chr((p+3)%26+p))语句,输出的结果是()。

A 66

B 66 S

C 98 y

D 98 e

解析:【喵呜刷题小喵解析】首先,我们需要理解题目中的两个主要操作:`ord('b')`和`print(p,chr((p+3)%26+p))`。

1. `ord('b')`:这是一个内置函数,用于返回字符`'b'`的ASCII码值。在ASCII表中,字符`'b'`的码值是98。
2. `print(p,chr((p+3)%26+p))`:这部分稍微复杂一些。首先,我们来看`p+3`,由于`p`的值是98,所以`p+3`的结果是101。接着,我们对101取模26,得到的结果是15。再然后,我们将15加上`p`,即98 + 15 = 113。最后,我们使用`chr()`函数将113转换回字符,即`chr(113)`是字符`'y'`。

所以,整个`print(p,chr((p+3)%26+p))`语句的输出结果是`98 y`。因此,正确答案是D。

二、实操题

6、编程实现:

给定N个数字(包含整数和小数),找到N个数中最大的数字。

输入描述:

输入N个数字(N>2),且N个数字之间以英文逗号隔开

输出描述:

输出N个数字中最大的数字


样例输入:

4,8,2

样例输出:

8

参考答案:br />首先,我们需要读取输入,然后将输入字符串按逗号分隔,得到一个数字列表。接着,我们遍历列表,找出其中的最大值并输出。

解析:【喵呜刷题小喵解析】
这个题目是一个编程题目,需要我们根据给定的输入描述,编写代码实现找出N个数字中的最大值。具体的步骤可以分为以下几步:

1. 读取输入,将输入字符串按逗号分隔,得到一个数字列表。

2. 遍历列表,找出其中的最大值。

3. 输出最大值。

在Python中,我们可以使用split()函数将输入字符串按逗号分隔,得到一个字符串列表,然后使用map()函数将字符串列表转换为数字列表,最后使用max()函数找出最大值。具体的代码实现如下:


```python
# 读取输入
input_str = input()
# 将输入字符串按逗号分隔,得到一个字符串列表
str_list = input_str.split(',')
# 将字符串列表转换为数字列表
num_list = list(map(float, str_list))
# 找出最大值
max_num = max(num_list)
# 输出最大值
print(max_num)
```
在这个代码中,我们首先使用input()函数读取输入,然后使用split()函数将输入字符串按逗号分隔,得到一个字符串列表。接着,我们使用map()函数将字符串列表中的每个元素转换为浮点数,得到一个数字列表。最后,我们使用max()函数找出数字列表中的最大值,并使用print()函数输出最大值。

需要注意的是,如果输入的数字中包含非数字字符,或者输入的数字个数小于3个,那么上述代码可能会出现错误。因此,在实际使用中,我们需要对输入进行校验和错误处理。

7、提示信息:

质数:是一个大于1的自然数,且除了1和它本身外,不能被其他自然数整除的数。最小的质数是2,1不是质数。

合数:一个正整数,如果除1和它本身以外,还能被其他正整数整除,叫合数。如6是合数,除了1和6以外,还能被2和3整除。

分解质因数:每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数(分解质因数只针对合数)。如合数12=2×2×3。

分解质因数的方法是先用这个合数的最小质因数去除这个合数,结果若是一个质数就不再除下去;若是一个合数就继续按原来的方法从最小质因数除起,直至最后除得的结果是一个质数。

例如:

合数18分解质因数,首先用最小质因数2去除,除后结果为合数9,继续用最小质因数3去除,除后结果为质数3,就不再除下去。所以18的质因数为2、3、3,故质因数的个数为3;

编程实现:

给定一个合数N,将N分解质因数后,输出其质因数个数。

输入描述:

输入一个合数N

输出描述:

将N分解质因数后,输出质因数个数


样例输入:

18

样例输出:

3

参考答案:对于给定的合数N,我们需要将其分解质因数,并输出质因数的个数。

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

首先,我们需要理解题目中的关键概念:质数、合数和分解质因数。质数是一个大于1的自然数,且除了1和它本身外,不能被其他自然数整除的数。合数是一个正整数,如果除1和它本身以外,还能被其他正整数整除,叫合数。分解质因数是指将一个合数写成几个质数相乘的形式。

对于编程实现,我们可以使用以下步骤:

1. 定义一个变量count,用于记录质因数的个数,初始值为0。
2. 从2开始,依次用每个小于N的自然数去除N,如果能整除,说明N能被这个数整除,这个数就是N的一个质因数。
3. 如果N能被整除,继续用N除以这个质因数,得到新的商。重复步骤2,直到商为1。
4. 在每次找到质因数后,将count加1。
5. 最后输出count的值,即为质因数的个数。

需要注意的是,在分解质因数的过程中,我们需要用到循环和条件判断,因此需要使用编程语言中的循环结构和条件语句。具体的实现方式会根据编程语言的不同而有所差异。

在样例输入中,给定合数N为18,按照分解质因数的步骤,我们可以得到18的质因数为2、3、3,因此质因数的个数为3。输出3即可。

8、编程实现:

给定一个含有字母和数字的字符串,输出此字符串中最长的数字子串的长度。如:字符串“a2a22d”,最长的数字子串为22,长度为2,故输出2

字符串“1q12h567j765”,最长的数字子串为567和765,长度都为3,故输出3

输入描述:

输入一个含有字母和数字的字符串(5<字符串长度<101)

输出描述:

输出此字符串中最长的数字子串的长度


样例输入:

a2a22d

样例输出:

2

参考答案:br />要实现题目要求的功能,可以使用Python编写程序。以下是代码实现:```pythondef max_length_of_numeric_substring(s):max_len = 0current_len = 0for char in s:if char.isdigit():current_len += 1max_len = max(max_len, current_len)else:current_len = 0return max_len# 测试s1 = "a2a22d"print(max_length_of_numeric_substring(s1)) # 输出 2s2 = "1q12h567j765"print(max_length_of_numeric_substring(s2)) # 输出 3```

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

该程序定义了一个函数`max_length_of_numeric_substring`,接受一个字符串`s`作为输入,返回字符串中最长的数字子串的长度。

在函数中,我们初始化两个变量`max_len`和`current_len`,分别表示当前最长数字子串的长度和当前数字子串的长度。

然后,我们遍历字符串`s`中的每个字符。如果字符是数字,则将`current_len`加1,并更新`max_len`为`max_len`和`current_len`中的较大值。如果字符不是数字,则将`current_len`重置为0。

最后,我们返回`max_len`作为结果。

在主程序中,我们定义了两个测试字符串`s1`和`s2`,并分别调用`max_length_of_numeric_substring`函数进行测试。输出结果显示,对于输入字符串`s1`,最长的数字子串为"22",长度为2;对于输入字符串`s2`,最长的数字子串为"567"和"765",长度都为3。

9、提示信息:

质数:是一个大于1的自然数,且除了1和它本身外,不能被其他自然数整除的数。最小的质数是2,1不是质数。

大于2的偶数有一个特点,任意一个大于2的偶数可以由一对质数相加得到,但有的偶数不止有一对这样的质数对。

如偶数6,有一对质数相加得6,为(3,3)

如偶数14,有两对质数相加得14,分别是(3,11),(7,7)

编程实现:

给定一个大于2的偶数,在所有满足“任意一个大于2的偶数可以由两个质数相加得到”这个特点的质数对中,找出两个质数差值最小的一对,并将差值输出(差值为大数减小数的值,两个质数相等时差值为0)。

例如:偶数16,满足特点的质数对有(5,11)和(3,13),差值最小的一对是(5,11),11减5,差值为6。

输入描述:

输入一个大于2的偶数N

输出描述:

输出满足“任意一个大于2的偶数可以由两个质数相加得到”这个特点的所有质数对中,差值最小的那一对的差值


样例输入:

16

样例输出:

6

参考答案:首先,我们需要找到大于2的所有质数。然后,对于每个偶数,我们需要遍历所有质数对,计算差值,并找出差值最小的一对。

解析:【喵呜刷题小喵解析】:
本题要求找到大于2的偶数可以由两个质数相加得到的所有质数对中,差值最小的一对,并输出其差值。

首先,我们需要明确什么是质数。质数是一个大于1的自然数,且除了1和它本身外,不能被其他自然数整除的数。最小的质数是2,1不是质数。

其次,我们需要知道大于2的偶数可以由一对质数相加得到,但有的偶数不止有一对这样的质数对。

对于输入的大于2的偶数N,我们需要遍历所有大于2的质数,找到所有满足条件的质数对,并计算它们的差值。然后,我们需要找出差值最小的一对,并输出其差值。

具体的实现步骤如下:

1. 定义一个数组或列表,用于存储大于2的质数。
2. 遍历数组或列表中的每个质数,对于每个质数,再遍历数组或列表中的剩余质数,计算它们的和,如果和等于N,则找到了一对满足条件的质数对。
3. 对于每对满足条件的质数对,计算它们的差值,并找出差值最小的一对。
4. 输出差值最小的一对的差值。

需要注意的是,由于题目要求输出的是差值最小的一对,因此在计算差值时,需要记录当前最小的差值以及对应的质数对。

样例输入为16,样例输出为6。这是因为16可以由5和11相加得到,也可以由3和13相加得到。在这两对质数对中,5和11的差值最小,为6。

10、编程实现:

孙悟空的金箍棒可以变高也可以变矮还可以变出多个金箍棒。

这天孙悟空无聊变出了N个长短不一金箍棒,这些金箍棒之间相互吵闹,攀比谁高。当孙悟空每次手指其中一个金箍棒时,这个金箍棒高度不变,其他的金箍棒高度都会增加1。只有当所有金箍棒高度都一样时,他们之间才不相互吵闹,也不会再增加高度,保持静止。分别给定N个金箍棒的初始高度,请你帮助孙悟空计算一下至少手指几次可以让N个金箍棒高度都一样。

例如:有3个金箍棒,初始高度分别为2,3,4。

第一次手指第三个金箍棒,第三个金箍棒高度不变,第一和第二个金箍棒高度分别增加1,变为3,4,4;第二次手指第二个金箍棒,第二个金箍棒高度不变,第一和第三个金箍棒高度分别增加1,变为4,4,5;第三次手指第三个金箍棒,第三个金箍棒高度不变,第一和第二个金箍棒高度分别增加1,变为5,5,5;这时3个金箍棒的高度都为5,手指3次后金箍棒高度一样。所以至少手指3次才能使金箍棒高度都一样。

输入描述:

输入N个非全部相等的正整数(2<N<31),且之间以英文逗号隔开,分别表示N个金箍棒的初始高度

输出描述:

输出一个正整数,表示至少手指几次才能使金箍棒高度都一样


样例输入:

2,3,4

样例输出:

3

参考答案:根据题目描述,我们需要计算至少手指几次才能让N个金箍棒的高度都一样。首先,我们需要找到金箍棒中的最大值和最小值。假设最大值为max,最小值为min,数量为N。1. 如果max和min相等,那么不需要进行任何操作,直接输出0。2. 如果max和min不相等,那么需要进行如下操作:- 将所有的金箍棒高度都增加到max。- 然后从高度为max的金箍棒开始,每次减少1,直到所有金箍棒的高度都一样。具体步骤如下:1. 找到金箍棒中的最大值max和最小值min。2. 计算需要增加的高度delta = max - min。3. 将所有金箍棒的高度都增加到max,需要进行N-1次操作。4. 从高度为max的金箍棒开始,每次减少1,需要进行delta次操作。因此,总的操作次数为N-1 + delta。

解析:【喵呜刷题小喵解析】:
本题是一个经典的算法问题,可以使用贪心算法来解决。

首先,我们需要找到金箍棒中的最大值和最小值,这是通过遍历输入的数组来实现的。

然后,我们计算需要增加的高度delta,这是通过计算最大值和最小值的差值来实现的。

接下来,我们将所有金箍棒的高度都增加到最大值,这是通过遍历数组并将每个元素都设置为最大值来实现的。

最后,我们从高度为最大值的金箍棒开始,每次减少1,直到所有金箍棒的高度都一样,这是通过遍历数组并将每个元素都减去1来实现的。

因此,总的操作次数为N-1 + delta,这是通过计算N-1和delta的和来实现的。

在本题中,我们需要输出最少需要手指几次才能让所有金箍棒的高度都一样。因此,我们只需要输出总的操作次数即可。

11、编程实现:

六月一日是国际儿童节,小蓝的学校为迎接儿童节要在学校的一块正方形空地上使用不同颜色的花卉摆放图案。

为了摆放的更精准,图案更漂亮,小蓝把这块正方形空地同比例缩小将其画在纸上,并平分成100*100的方格,每个方格的坐标点为,(1,1)...(100,100),如下图:

首先在指定坐标的方格内放置红色的花卉(每个方格放一盆),完成后,找出最多有多少盆红色花卉在同一条直线上。(同一直线包含同一列、同一行、同一对角线,红色花卉可以连续也可以不连续)

如:指定的坐标(2,1)、(3,2)、(5,2)、(4,3)、(3,4)、(6,5)的方格内放置红色的花卉,其中最多的红色花卉在同一条直线上的坐标点为(2,1)、(3,2)、(4,3)、(6,5),故最多有4盆红色的花卉在同一条直线上。

输入样例:

2,1 3,2 5,2 4,3 3,4 6,5

输出样例:

4

参考答案:输入样例中的坐标方格内放置红色的花卉,最多有4盆红色的花卉在同一条直线上。

解析:【喵呜刷题小喵解析】:
根据题目描述,我们需要找出最多有多少盆红色花卉在同一条直线上。根据输入样例,指定的坐标方格内放置了红色的花卉,我们可以通过分析这些坐标来找出最多有多少盆红色花卉在同一条直线上。

首先,我们可以分析每个坐标方格,判断它们是否在同一条直线上。如果它们在同一条直线上,我们就统计这条直线上的红色花卉数量。

对于输入样例中的坐标(2,1)、(3,2)、(5,2)、(4,3)、(3,4)、(6,5),我们可以发现(2,1)、(3,2)、(4,3)、(6,5)在同一条对角线上,因此最多有4盆红色的花卉在同一条直线上。

因此,根据题目要求,我们只需要找出最多有多少盆红色花卉在同一条直线上,然后输出这个数量即可。

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

创作类型:
原创

本文链接:第12届蓝桥杯Python青少组_国赛_中/高级组_2021年5月真题答案及解析

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