image

编辑人: 流年絮语

calendar2025-05-21

message2

visits296

第13届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2021年11月27日真题答案及解析

一、实操题

1、编程实现:

给定一个正整数N,求N 除以3的余数。

输入描述:

输入一个正整数N

输出描述:

输出N 除以3的余数


样例输入:

5

样例输出:

2

参考答案:br />```pythonn = int(input())remainder = n % 3print(remainder)```

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

这个问题是一个简单的编程问题,要求计算一个正整数N除以3的余数。在Python中,我们可以使用模运算符(%)来计算余数。

首先,我们使用`input()`函数从标准输入读取一个正整数N,并将其转换为整数类型。然后,我们使用模运算符(%)计算N除以3的余数,并将结果存储在变量`remainder`中。最后,我们使用`print()`函数将余数输出到标准输出。

在样例输入中,输入的N是5,因此输出应该是2,即5除以3的余数是2。

2、编程实现:

给定一个字符串,判断字符串的长度是奇数还是偶数。

输入描述:

输入一个字符串

输出描述:

如果字符串长度为偶数输出数字“0”,否则输出数字“1”


样例输入:

Hello,python

样例输出:

0

参考答案:br />我们可以使用Python来实现这个功能。代码如下:```pythondef judge_string_length(input_str):length = len(input_str)if length % 2 == 0:return "0"else:return "1"# 测试代码input_str = "Hello,python"print(judge_string_length(input_str))```

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

该题目要求我们判断一个字符串的长度是奇数还是偶数,并将结果以数字“0”或“1”的形式输出。

我们可以定义一个函数`judge_string_length`,它接受一个字符串作为输入,然后计算这个字符串的长度。如果长度是偶数,函数返回“0”,否则返回“1”。

在测试代码中,我们定义了一个字符串`input_str`,并调用`judge_string_length`函数,将结果打印出来。

对于样例输入"Hello,python",它的长度是10,是偶数,所以输出结果为“0”。

3、编程实现:

给定N个正整数,判断N个正整数中,哪些正整数各个位数上的数字和为10,并输出这些正整数,若没有正整数满足条件,则输出0。

例如:输入4个正整数:19,20,21,28,其中19和28的个位和十位上的数字相加和为10,输出19,28。

输入描述:

输入N个正整数,正整数之间用一个英文逗号隔开

输出描述:

输出N个正整数中各个位数上的数字和为10的正整数,正整数之间用一个英文逗号隔开,若没有正整数满足条件,则输出0


样例输入:

19,20,21,28

样例输出:

19,28

参考答案:br />```pythondef check_sum(n):# 将数字转为字符串,方便处理每一位str_n = str(n)# 初始化数字之和为0sum = 0# 遍历字符串中的每一位for digit in str_n:sum += int(digit)# 判断数字之和是否为10if sum == 10:return nelse:return NoneN = input().split(',')result = []for num in N:num = int(num)result.append(check_sum(num))# 过滤掉None,只保留满足条件的数字result = [num for num in result if num is not None]# 判断是否有满足条件的数字if result:print(','.join(result))else:print('0')```

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

1. 定义一个函数`check_sum`,该函数接受一个正整数`n`作为输入,返回该数字各个位数之和。如果数字各位数之和为10,返回该数字,否则返回`None`。

2. 从输入中读取N个正整数,并将它们存储在列表`N`中。

3. 遍历列表`N`中的每一个数字,调用`check_sum`函数检查该数字各位数之和是否为10。如果是,将该数字添加到结果列表`result`中。

4. 过滤掉`result`列表中的`None`元素,只保留满足条件的数字。

5. 判断`result`列表是否为空。如果不为空,将满足条件的数字用英文逗号连接起来并输出;如果为空,输出0。

4、提示信息:

回文数:设n是一任意自然数。若将n的各个位数上的数字反向排列所得自然数n1与n相等,则称n为一回文数。

例如:若n=1234321,则称n为一回文数。

平方回文数:指一个数不仅是回文数,并且这个数还是某一个数的平方。

例如:121,是一个回文数,并且是11的平方数。

编程实现:

给定一个正整数M(100<M<2000),输出100到M之间(包含M)的平方回文数的个数。

例如:M为150,则在100到150之间的平方回数有1个,为121,输出1。

输入描述:

输入一个正整数M

输出描述:

输出100到M之间(包含M)的平方回文数的个数


样例输入:

150

样例输出:

1

参考答案:```pythondef is_palindrome(n):return str(n) == str(n)[::-1]def is_square(n, limit):root = int(n ** 0.5)return root * root == n and root <= limitdef count_square_palindromes(M):count = 0for i in range(100, M + 1):if is_palindrome(i) and is_square(i, M):count += 1return countM = int(input())print(count_square_palindromes(M))```

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

首先,我们需要定义两个辅助函数:`is_palindrome`和`is_square`。`is_palindrome`函数用于判断一个数是否为回文数,通过将数字转换为字符串并比较其反转后的字符串是否与原字符串相等来实现。`is_square`函数用于判断一个数是否为某个数的平方,同时确保该数的平方根不超过给定的上限。

然后,我们定义一个主函数`count_square_palindromes`,用于计算100到M之间的平方回文数的个数。在函数内部,我们使用一个循环遍历100到M之间的所有数,对于每个数,我们检查它是否为回文数以及是否为某个数的平方,如果是,则计数器加1。最后,我们返回计数器的值。

在主程序中,我们读取输入的正整数M,并调用`count_square_palindromes`函数来计算100到M之间的平方回文数的个数,并将结果输出到控制台。

5、编程实现:

小明去游乐场玩飞镖扎气球的游戏,一共有n个气球,依次排成一行,每个气球上有一个数字,表示这个气球的分值。

游戏计分规则:

1、戳破1个气球,将获得其本身及左右相邻气球,共三个分值相乘的分数;

2、如果戳破的气球左边或右边没有气球,则获得其本身及相邻气球,共两个分值相乘的分数;如果被戳破的气球左边和右边都没有气球(是最后一个被戳破的气球),则这个气球本身的分值作为分数。

3、已经被戳破的气球不再计算。

飞镖数量不限,可以任意选择顺序戳破气球,根据计分规则,争取使得游戏最后得分最高。

例如:一共有3个气球,分值分别为2,4,6。

若想获得最高得分:

1)先戳破4,得分为2X4X6=48;

2)再戳破2,得分为2X6=12,累计得分60;

3)再戳破6,得分为6,累计得分66;

最后总得分为66,为最高得分。

输入描述:

输入n个正整数,表示气球的分值,且正整数之间以一个英文逗号隔开

输出描述:

输出正整数,表示戳破所有气球后获得的最高分数


样例输入:

2,4,6

样例输出:

66

参考答案:br />```pythondef max_score(scores):n = len(scores)dp = [[0] * n for _ in range(n)]for i in range(n):dp[i][i] = scores[i]for length in range(2, n + 1):for i in range(n - length + 1):j = i + length - 1dp[i][j] = max(dp[i][j], dp[i+1][j] * scores[i], dp[i][j-1] * scores[j])for k in range(i+1, j):dp[i][j] = max(dp[i][j], dp[i][k] * dp[k+1][j] * scores[k])return dp[0][n-1]scores = list(map(int, input().split(',')))print(max_score(scores))```

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

本题可以使用动态规划来解决。

首先,我们定义一个二维数组dp,其中dp[i][j]表示戳破第i个到第j个气球所能获得的最大分数。

然后,我们初始化dp数组,将dp[i][i]设为第i个气球的分值,表示戳破一个气球的情况。

接着,我们使用两层循环,外层循环表示戳破气球的数量,内层循环表示戳破的气球的位置。

在内层循环中,我们计算戳破第i个到第j个气球所能获得的最大分数。

首先,我们计算戳破第i+1个到第j个气球所能获得的最大分数,再乘以第i个气球的分值,得到戳破第i个气球的情况。

其次,我们计算戳破第i个到第j-1个气球所能获得的最大分数,再乘以第j个气球的分值,得到戳破第j个气球的情况。

最后,我们遍历第i+1个到第j-1个气球,计算戳破第i个到第k个气球所能获得的最大分数,再乘以戳破第k+1个到第j个气球所能获得的最大分数,再乘以第k个气球的分值,得到戳破第k个气球的情况。

最后,我们返回dp[0][n-1],表示戳破所有气球所能获得的最大分数。

注意,在输入时,我们需要将输入的字符串转换为整数列表。

在输出时,我们直接输出戳破所有气球所能获得的最大分数。

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

创作类型:
原创

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

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