image

编辑人: 流年絮语

calendar2025-06-06

message5

visits709

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

一、实操题

1、编程实现:

分别输入两个正整数M,N,输出M到N之间(含M,N)所有可被7整除,但不是5的倍数的数字,并以逗号分隔按顺序打印在一行。

输入描述:

分别输入两个正整数M,N

输出描述:

输出M到N之间(含M,N)所有可被7整除,但不是5的倍数的数字,并以逗号分隔按顺序打印在一行


样例输入:

100
147

样例输出:

112,119,126,133,147

参考答案:br />```pythonM, N = map(int, input().split())result = [str(i) for i in range(M, N+1) if i % 7 == 0 and i % 5 != 0]print(','.join(result))```

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

首先,我们读取用户输入的两个正整数M和N。

然后,我们创建一个列表,用于存储满足条件的数字。我们使用列表推导式,遍历从M到N的所有数字,如果数字可以被7整除并且不是5的倍数,就将其添加到列表中。

最后,我们使用字符串的`join`方法,将列表中的数字用逗号连接起来,并打印出来。

注意,题目要求输出的是字符串,所以我们在列表推导式中需要将数字转换为字符串。

2、编程实现:

输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数并输出。

输入描述:

输入一行字符

输出描述:

按英文字母、空格、数字和其它字符的顺序输出其对应的个数


样例输入:

a1 b2 c d4 !!! 5

样例输出:

4
5
4
3

参考答案:br />```pythondef count_chars(s):eng_count = 0space_count = 0digit_count = 0other_count = 0for char in s:if char.isalpha():eng_count += 1elif char.isspace():space_count += 1elif char.isdigit():digit_count += 1else:other_count += 1return eng_count, space_count, digit_count, other_counts = input()eng, space, digit, other = count_chars(s)print(eng)print(space)print(digit)print(other)```

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

本题要求输入一行字符,并分别统计出其中的英文字母、空格、数字和其他字符的个数。我们可以编写一个函数来实现这个功能。

首先,我们定义一个函数`count_chars`,它接受一个字符串`s`作为输入。在函数内部,我们初始化四个计数器:`eng_count`用于统计英文字母个数,`space_count`用于统计空格个数,`digit_count`用于统计数字个数,`other_count`用于统计其他字符个数。

然后,我们遍历字符串`s`中的每个字符。如果字符是英文字母,则`eng_count`加1;如果字符是空格,则`space_count`加1;如果字符是数字,则`digit_count`加1;否则,`other_count`加1。

最后,我们返回四个计数器的值。

在主程序中,我们首先使用`input`函数获取用户输入的字符串,并调用`count_chars`函数进行统计。然后,我们使用`print`函数依次输出四个计数器的值。

对于样例输入`a1 b2 c d4 !!! 5`,程序会输出`4 5 4 3`,表示英文字母个数为4,空格个数为5,数字个数为4,其他字符个数为3。

3、编程实现:

有n个人围成一个圈,按顺序排好号。然后从第一个人开始报数(从1到3报数),报到3的人退出圈子,然后继续从1到3报数,直到最后留下一个人游戏结束,问最后留下的是原来第几号。

输入描述:

输入一个正整数n

输出描述:

输出最后留下的是原来的第几号


样例输入:

5

样例输出:

4

参考答案:```pythondef last_man_standing(n):if n == 1:return 1people = list(range(1, n+1))index = 0while len(people) > 1:index = (index + 2) % len(people)del(people[index])return people[0]print(last_man_standing(5)) # 输出: 4```

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

这是一个经典的约瑟夫环问题,也称为“丢手绢”问题。有n个人围成一圈,从第一个人开始报数,每次报到3的人退出圈子,直到最后留下一个人。

解决这个问题的一种有效方法是使用模拟。我们可以创建一个列表来表示这n个人,然后从第一个人开始报数。每次报到3的人,我们从列表中删除他。最后,列表中的最后一个元素就是最后留下的人。

在Python中,我们可以使用列表的索引来表示人的位置。初始时,索引从0开始。每次报数后,索引加2(因为报到3的人退出,所以下一个人是索引+2的人)。当列表长度大于1时,我们继续这个过程,直到列表长度为1。

在上面的代码中,我们首先检查特殊情况:如果n等于1,直接返回1。否则,我们创建一个包含1到n的列表,表示这n个人。我们从索引0开始报数,每次报到3的人,我们从列表中删除他。最后,列表中的最后一个元素就是最后留下的人,我们返回这个值。

4、编程实现:

计算某个电梯的用电量。

电梯可到达最低楼层为地下 3 层(-3),最高为地上 12 层(12),中间没有 0 层;

电梯向上运行时每上升 1 层消耗 1 单位电量,向下运行时每下降 1 层消耗 0.3 单位电量;

请你通过输入的某段时间内电梯停过的楼层顺序,计算电梯消耗了多少单位电量。

输入描述:

N 个数字(2<=N<=10),数字间以逗号分隔,代表电梯停过的楼层[-3,12];

输出描述:

电梯消耗的单位电量数;


样例输入:

1,11,1

样例输出:

13.0

参考答案:br />根据题目描述,我们需要计算电梯消耗的单位电量数。首先,我们需要根据输入的楼层顺序,计算电梯上升和下降的层数。对于每个楼层,我们可以计算电梯上升或下降的层数,然后根据题目中给出的规则计算电量消耗。具体步骤如下:1. 初始化变量total_electricity为0,表示总电量消耗。2. 遍历输入的楼层顺序,对于每个楼层:* 如果当前楼层比前一个楼层高,则电梯上升了(当前楼层-前一个楼层)层,总电量消耗增加(当前楼层-前一个楼层)单位。* 如果当前楼层比前一个楼层低,则电梯下降了(前一个楼层-当前楼层)层,总电量消耗增加0.3*(前一个楼层-当前楼层)单位。最后,返回总电量消耗。

解析:【喵呜刷题小喵解析】
本题是一道计算电梯用电量的编程题目。根据题目描述,电梯向上运行时每上升1层消耗1单位电量,向下运行时每下降1层消耗0.3单位电量。

首先,我们需要根据输入的楼层顺序,计算电梯上升和下降的层数。对于每个楼层,我们可以计算电梯上升或下降的层数,然后根据题目中给出的规则计算电量消耗。

具体实现时,我们可以使用循环遍历输入的楼层顺序,对于每个楼层,判断当前楼层是否比前一个楼层高或低,然后计算电梯上升或下降的层数,并累加到总电量消耗中。

最后,返回总电量消耗即可。

需要注意的是,由于电梯可到达的最低楼层为地下3层(-3),最高为地上12层(12),因此在计算电梯上升或下降的层数时,需要考虑到楼层的符号。如果当前楼层比前一个楼层高,则电梯上升了(当前楼层-前一个楼层)层;如果当前楼层比前一个楼层低,则电梯下降了(前一个楼层-当前楼层)层。在计算电量消耗时,需要根据题目中给出的规则进行计算。

5、提示信息:

在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的数,被称为素数,又叫质数。

超级素数是指一个素数,每去掉最后面的一个数字,总能保证剩下的数依然为素数。

比如:“373”就是一个超级素数,去掉个位的“3”后,“37”依然是素数;继续去掉“37”个位的 “7”后,“3”还是素数。

编程实现:

输入一个正整数 n (10≤n≤108),输出所有小于等于n的超级素数的个数。

输入描述:

输入一个正整数 n (10≤n≤108)

输出描述:

输出所有小于等于 n 的超级素数的个数


样例输入:

30

样例输出:

6


样例输入:

50

样例输出:

8


样例输入:

100

样例输出:

13


样例输入:

500

样例输出:

21


样例输入:

1000

样例输出:

27


样例输入:

3200

样例输出:

34

参考答案:```pythonimport mathdef is_prime(n):if n < 2:return Falsefor i in range(2, int(math.sqrt(n)) + 1):if n % i == 0:return Falsereturn Truedef is_super_prime(n):while n % 10 != 0:n = int(str(n)[:-1])if not is_prime(n):return Falsereturn Truedef count_super_primes(n):count = 0for i in range(2, n + 1):if is_super_prime(i):count += 1return countn = int(input())print(count_super_primes(n))```

解析:【喵呜刷题小喵解析】:
首先,我们需要编写两个辅助函数,`is_prime(n)`用来判断一个数是否为素数,`is_super_prime(n)`用来判断一个数是否为超级素数。

在`is_prime(n)`函数中,我们遍历从2到n的平方根的所有整数,如果n能被其中的任何一个数整除,那么n就不是素数,返回False;否则,n就是素数,返回True。

在`is_super_prime(n)`函数中,我们不断去掉n的个位数,直到n的个位数为0,如果在这个过程中,n不再是素数,那么n就不是超级素数,返回False;否则,n就是超级素数,返回True。

最后,在`count_super_primes(n)`函数中,我们遍历从2到n的所有整数,如果某个数是超级素数,我们就将计数器加1。最后,我们返回计数器的值,即小于等于n的超级素数的个数。

在主程序中,我们读取输入的正整数n,然后调用`count_super_primes(n)`函数,输出小于等于n的超级素数的个数。

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

创作类型:
原创

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

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