image

编辑人: 流年絮语

calendar2025-06-01

message3

visits948

第13届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2022年3月13日真题参考答案

一、实操题

1、编程实现:

给定一个正整数N,输出N个连续星号“*”。

输入描述:

输入一个正整数N,表示星号的个数

输出描述:

输出N个连续星号


样例输入:

3

样例输出:

***

参考答案:br />```pythonN = int(input())print('*' * N)```


2、编程实现:

给定一个小写字母,输出其对应的大写字母。

输入描述:

输入一个小写字母

输出描述:

输出小写字母对应的大写字母


样例输入:

a

样例输出:

A

参考答案:br />在Python中,可以使用内置的`ord()`和`chr()`函数来实现这个功能。`ord()`函数可以返回字符的ASCII码,`chr()`函数可以返回指定ASCII码的字符。小写字母a到z的ASCII码范围是97到122,大写字母A到Z的ASCII码范围是65到90。因此,可以通过将小写字母的ASCII码减去32来得到对应的大写字母的ASCII码。```pythondef to_upper(letter):if 'a' <= letter <= 'z':return chr(ord(letter) - 32)else:return "输入的不是小写字母"# 测试print(to_upper('a')) # 输出: A```


3、编程实现:

给定一个正整数N,和M个不同的正整数。然后将M个正整数中任意两个数进行组合,且求出每组组合的和,问M个正整数中有多少组组合的和恰好等于N。

如:正整数N为6,M为5,5个不同的正整数分别为1,2,3,4,5。

任意两数组合有10组:1+2,1+3,1+4,1+5,2+3,2+4,2+5,3+4,3+5,4+5

其中和正好等于6的组合有2组:1+5,2+4

输入描述:

第一行输入一个正整数N

第二行输入M个不同的正整数,且正整数之间以一个英文逗号隔开

输出描述:

输出M个不同正整数中有多少组组合的和恰好等于N


样例输入:

5
1,2,3,4,5

样例输出:

2

参考答案:```pythondef count_combinations(N, nums):count = 0for i in range(len(nums)):for j in range(i+1, len(nums)):if nums[i] + nums[j] == N:count += 1return countN = int(input())nums = list(map(int, input().split(',')))print(count_combinations(N, nums))```


4、编程实现:

有N个小朋友从左到右排成一排,每个小朋友手中都有一定数量的糖果,且糖果总数量是N的倍数。

计算出最少调整几次可以使每个小朋友的糖果数量相同。

调整规则如下:

规则1:每个小朋友的糖果只能调整到左右相邻的两个小朋友手中;

规则2:第一个小朋友的糖果只能调整到第二个小朋友手中;

规则3:最后一个小朋友的糖果,只能调整到倒数第二个小朋友手中。 

例如:1~3号个小朋友原有糖果数量分别为6,4,2。

1)1号小朋友拿出两块给2号小朋友;

2)2号小朋友拿出两块给3号小朋友;

两次操作后三个小朋友手中糖果分别为4,4,4。 

即按照调整规则最少操作2次可以使3个小朋友手中糖果数量都相同。

现按照顺序给出第1~N个小朋友手中原有糖果数量,按照调整规则计算出最少调整几次可以使小朋友手中的糖果数量都相同。

输入描述:

输入N个正整数(1<正整数<100),表示从1到N号小朋友手中原有糖果数量,正整数之间以一个英文逗号隔开,且所有正整数之和是N的倍数

输出描述:

按照调整规则计算出最少操作几次可以使小朋友手中糖果数量都相同


样例输入:

6,4,2

样例输出:

2

参考答案:```pythondef min_adjust(nums):N = len(nums)total_candies = sum(nums)target_candies = total_candies // Nmoves = 0for i in range(N):if nums[i] > target_candies:moves += nums[i] - target_candiesnums[i] = target_candieselif nums[i] < target_candies:moves += target_candies - nums[i]if i != N - 1:nums[i+1] += nums[i] - target_candiesnums[i] = target_candiesreturn moves# 测试nums = list(map(int, input().split(',')))print(min_adjust(nums))```


5、编程实现:

给定一个正整数M(1≤M≤5)和一个只包含数字的字符串(5<字符串长度≤20)。使用M个乘号插入到字符串中,且两个乘号不能相邻,插入后,生成一个乘法算式。找出一种使乘法算式数值最大的插入方式,并将结果输出。(乘号不能放在字符串的首尾位置)

如字符串为123456,插入2个乘号。插入方式有:

1*2*3456=6912,1*23*456=10488,1*234*56=13104,1*2345*6=14070,12*3*456=16416,12*34*56=22848,12*345*6=24840,123*4*56=27552,123*45*6=33210,1234*5*6=37020,其中乘法算式数值最大是第十种,为37020。

输入描述:

第一行输入一个正整数M(1≤M≤5),代表乘号个数

第二行输入一个只包含数字的字符串(5<字符串长度≤20),表示要插入M个乘号的字符串

输出描述:

输出一个整数,表示最大的结果


样例输入:

2
123456

样例输出:

37020

参考答案:对于给定的字符串和数字M,我们需要找到一种插入M个乘号的方式,使得乘法算式的数值最大。为了解决这个问题,我们可以使用动态规划的方法。首先,我们需要定义一个二维数组dp,其中dp[i][j]表示在字符串的前i个字符中插入j个乘号所能得到的最大数值。然后,我们可以使用递推关系来计算dp数组。对于每个i和j,我们可以考虑在字符串的第k个字符后插入一个乘号,其中k的取值范围是[1, i-j]。这样,我们可以将字符串分成两部分,一部分是前k个字符,另一部分是后i-k个字符。对于前k个字符,我们可以使用dp[k][j-1]来表示插入j-1个乘号所能得到的最大数值。对于后i-k个字符,我们可以直接使用字符串的这部分来计算数值。最后,我们可以遍历所有可能的i和j,找到最大的dp[i][j]作为最终的结果。


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

创作类型:
原创

本文链接:第13届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2022年3月13日真题参考答案

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