image

编辑人: 长安花落尽

calendar2025-06-16

message9

visits625

第13届蓝桥杯Python青少组_省赛_中/高级组_2022年4月17日真题参考答案

一、单选题

1、下列二进制数中最大的是(  )。

A 110

B 1010

C 1100

D 1001


2、以下方法中,不是对文件读操作的是(  )。

A readline()

B readlines()

C readtext()

D read()


3、以下选项,对random.uniform(a,b)语句表述正确的是(  )。

A 随机生成一个a到b之间的整数 

B 随机生成一个a到b之间的浮点数  

C 随机生成一个a和b之外的整数 

D 随机生成一个a和b之外的浮点数


4、下列表达式在遍历字典d时,变量x代表字典值的是( )。

A for x in d: 

B  for x in d.keys():  

C for x in d.items():  

D for x in d.values(): 


5、以下对turtle库中函数描述正确的是(  )。

A goto() 函数设置当前画笔移动到原点位置

B pensize()函数设置画笔的移动速度

C setup()函数定义窗体的大小和相对位置 

D hideturtle()函数是将海龟显示出来


二、实操题

6、编程实现:

编写程序,统计1到N之间所有正整数中个位数为零的有几个。

例如:N=21,1到21之间所有正整数中个位数为零的数有2个,分别为:10,20。

输入描述:

输入一个正整数N

输出描述:

输出1到N之间(包含N)所有正整数中个位数为零的有几个


样例输入:

21

样例输出:

2

参考答案:br />```pythonN = int(input())count = 0for i in range(1, N+1):if i % 10 == 0:count += 1print(count)```


7、编程实现:

输入多个英文单词(单词都为小写字母),然后按字典顺序排序输出 。

注:单词首字母相同时就比较第二个字母,以此类推。

输入描述:

输入多个由小写字母组成的英文单词,单词之间以一个英文逗号隔开

输出描述:

按字典顺序排序输出 ,且单词之间以一个英文逗号隔开


样例输入:

python,hello,world

样例输出:

hello,python,world

参考答案:br />```pythondef sort_words(input_str):words = input_str.split(',')words.sort()return ','.join(words)input_str = input("请输入多个英文单词,单词之间以一个英文逗号隔开:")print(sort_words(input_str))```


8、编程实现:

小蓝和小青在玩积木搭建游戏,具体玩法如下:

小蓝报一个数字N,代表高楼的高度,小青则需要使用最少的积木搭建出高度大于N的高楼。

给出小蓝所报出的数字N,及已有积木块每一块的高度,请你帮助小青找出最少需要多少块积木可以搭建出高度大于N的高楼。

例如:N=12,已有4个积木块的高度分别为4,7,8,4。

则最少需要2块积木,可以使搭建的高楼高度大于12,2块积木为7和8。

输入描述:

第一行输入一个正整数N,表示小蓝报出的数字

第二行输入多个正整数,表示已有积木块每一块的高度,正整数之间以一个英文逗号隔开。(要求所有正整数之和大于N)

输出描述:

输出最少需要使用多少块积木,可以搭建出高度大于N的高楼


样例输入:

12
4,7,8,4

样例输出:

2

参考答案:br />输入一个正整数N,表示小蓝报出的数字,再输入多个正整数,表示已有积木块每一块的高度。我们需要找到最少需要使用的积木块数,使得搭建的高楼高度大于N。


9、编程实现:

N个小朋友围成一圈(N≤60),并按照顺序进行编号(编号1到N),然后从编号为1的小朋友开始持续报数,当报到的数字中含3或者数字是3的倍数的小朋友,不能报数字而是报“过”(例如3,6,13,31这些数字都报“过”)。

一次游戏中,小朋友们玩的不亦乐乎,突然有小朋友发现前边报过的数字中已经有报错的,而后边小朋友还在继续报数。请你帮助小朋友找出第一次报错的小朋友是编号几。

例如:有3个小朋友,编号为1,2,3。编号1的小朋友报1、编号2的小朋友报2、编号3的小朋友报“过”、编号1的小朋友报4、编号2的小朋友报5、编号3的小朋友报6、编号1的小朋友报7;此时第一次报错的小朋友为编号3。(因为编号3的小朋友应该报“过”时,报成了“6”,而“6”是3的倍数)

输入描述:

第一行输入一个正整数N,表示小朋友的人数

第二行输入一组有错的报数序列(“0”表示含3或者是3的倍数的数字),序列元素之间以一个英文逗号隔开         

输出描述:

输出第一次报错的小朋友是编号几


样例输入:

3
1,2,0,4,5,6,7

样例输出:

3

参考答案:根据题目描述,我们需要找出第一次报错的小朋友编号。报错的情况是报数中含有3或者数字是3的倍数时,小朋友应该报“过”,但是报成了其他数字。首先,我们需要遍历输入的报数序列,找出报错的位置。由于报错的位置是在报数中含有3或者数字是3的倍数的位置,因此我们需要特别注意这些位置。在遍历的过程中,我们同时记录下当前小朋友的编号,当报错发生时,就输出该编号作为答案。具体的实现方法如下:1. 从报数序列的第二个元素开始遍历(因为第一个元素是1,不含有3或3的倍数)。2. 对于每个元素,判断是否为0(表示报错),如果是,则输出当前位置的编号,并结束程序。3. 如果不是0,则继续遍历下一个元素。


10、编程实现:

有N个正整数,现对N个正整数进行不同方式的排列,每次排列后都会按照以下规则进行一次计算,聪明的小蓝发现,排列方式不同,最后计算出的结果也不相同。

计算规则:

第一次:第一个数乘以第二个数乘以第三个数,结果记录为M(1);

第二次:第二个数乘以第三个数乘以第四个数,结果记录为M(2);

第三次:第三个数乘以第四个数乘以第五个数,结果记录为M(3);

第N-2次:第N-2个数乘以第N-1个数乘以第N个数,结果记录为M(N-2)。

最后计算M(1)+M(2)+M(3)......M(N-2)的数值。

找出一种排列方式使这个数值最大。

例如:N=4,4个正整数分别为1,2,3,4,那么排列方式就会有24种:

其中排列方式为1,3,4,2时,按照规则计算2次:1*3*4=12,3*4*2=24;乘积相加:12+24=36

这种排序方式是所有乘积相加的数值最大,为36。

输入描述:

输入N个正整数(3≤N),正整数之间一个英文逗号隔开

输出描述:

找出所有乘积相加的数值最大的排列方式,并输出数值


样例输入:

1,2,3,4

样例输出:

36

参考答案:```pythondef max_product_sum(numbers):n = len(numbers)# 使用动态规划的思想dp = [0] * ndp[0] = dp[1] = numbers[0]for i in range(1, n):for j in range(i):# 更新最大乘积dp[i] = max(dp[i], dp[j] * numbers[i])# 计算乘积和product_sum = 0for i in range(n-2):product_sum += dp[i] * dp[i+1]return product_sum# 输入样例numbers = list(map(int, input().split(',')))print(max_product_sum(numbers))```


11、编程实现:

有一块农田被划分为N*M块,农作物和杂草分布生长在农田中,其中农作物使用大写字母“R”表示,杂草使用大写字母“X”表示。请计算出农田中有几块独立的农作物区域(独立的农作物区域指该区域上下左右都被杂草围住,且N*M以外的区域都是杂草)。

例如:N=4,M=4,4*4的农田中农作物和杂草分布如下图:

这块4*4的农田中有3块独立的农作物区域(红色的3部分)。

输入描述:

第一行输入两个整数N和M(1≤N≤100,1≤M≤100),N表示农田的行数,M表示农田的列数,且两个正整数之间以一个英文逗号隔开

接下来的N行每行包括M个字符(字符只能为R或X),R表示农作物,X表示杂草,字符之间以一个英文逗号隔开

输出描述:

输出一个整数,表示N*M的农田中有几块独立的农作物区域


样例输入:

4,4
R,R,R,X
R,X,R,X
X,X,X,R
R,X,X,X

样例输出:

3

参考答案:```pythondef count_crop_areas(n, m, grid):# 初始化一个二维数组,用于记录每个位置是否属于农作物区域is_crop_area = [[False] * m for _ in range(n)]# 遍历农田的每个位置for i in range(n):for j in range(m):# 如果当前位置是农作物if grid[i][j] == 'R':# 初始化一个队列,用于广度优先搜索queue = [(i, j)]is_crop_area[i][j] = True# 广度优先搜索while queue:x, y = queue.pop(0)# 上下左右四个方向for dx, dy in [(0, 1), (0, -1), (1, 0), (-1, 0)]:nx, ny = x + dx, y + dy# 判断新位置是否合法if 0 <= nx < n and 0 <= ny < m:# 如果新位置是杂草,则跳过if grid[nx][ny] == 'X':continue# 如果新位置没有被访问过,则将其加入队列if not is_crop_area[nx][ny]:is_crop_area[nx][ny] = Truequeue.append((nx, ny))# 统计农作物区域的数量crop_areas = 0for i in range(n):for j in range(m):if is_crop_area[i][j]:crop_areas += 1return crop_areas# 输入n, m = map(int, input().split(','))grid = [list(input().split(',')) for _ in range(n)]# 输出print(count_crop_areas(n, m, grid))```


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

创作类型:
原创

本文链接:第13届蓝桥杯Python青少组_省赛_中/高级组_2022年4月17日真题参考答案

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