![cover](https://img-blog.csdnimg.cn/de12588e1b7a43688d0ad3b0afc2d95e.png)
蓝桥杯青少组python:第十三届省赛第一场
蓝桥杯青少组,第十三届省赛第一场,python。
选择题
1、下列二进制中最大数是()
- A 110
- B 1010
- C 1100
- D 1001
2、以下方法,不是对文件读操作的是()
- A
readline()
- B
readlines()
- C
readtext()
- D
read()
3、以下对turtle
库中函数描述正确的是()
- A
goto()
函数设置当前画笔移动到原点位置 - B
pensize()
函数设置画笔的移动速度 - C
setup()
函数定义窗体的大小和相对位置 - D
hideturtle()
函数是将海龟显示
解析:
turtle.goto(x,y)
:让海龟沿着绝对坐标进行运动turtle.pensize()
:设置线条的粗细turtle.setup(width,height,startx,starty)
:设置窗体大小及位置turtle.hideturtle()
:隐藏 turtle ,使其不可见
4、以下选项中,对random.uniform(a,b)
语句表达正确的是()
- A 随机生成一个a到b之间的整数
- B 随机生成一个a到b之间的浮点数
- C 随机生成一个a到b之外的整数
- D 随机生成一个a到b之外的浮点数
5、下列表达式在遍历字典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():
操作题
第一题(初中高级组均要考)
统计 1 1 1到 N N N之间所有正整数中个位数为 0 0 0的有几个?
例如: N = 21 N=21 N=21时, 1 1 1到 21 21 21之间所有的正整数中个位数为 0 0 0的数有 2 2 2个,分别为: 10 , 20 10,20 10,20。
输入描述
输入一个正整数 N N N。
输出描述
输出 1 1 1到 N N N之间(包含 N N N)所有正整数中个位数为 0 0 0的有几个。
输入样例
21
输出样例
2
代码实现
n = int(input())
ans = 0
for i in range(1, n + 1):
if i % 10 == 0:
ans += 1
print(ans)
第二题(初中高级组均要考)
输入多个英文单词(单词都为小写字母),然后按字典顺序排序输出。
单词首字母相同时就比较第二个字母,以此类推。
输入描述
输入多个由小写仪母组成的英文单词,单词之间以一个英文逗号隔开。
输出描述
按字典顺序排序输出,且单词之间以一个英文逗号隔开
输入样例
python,hello,world
输出样例
hello,python,world
代码实现
a = list(input().split(','))
a.sort()
print(','.join(a))
第三题(初中高级组均要考)
小蓝和小青在玩积木搭建游戏,具体玩法如下:
- 小蓝报一个数字N,代表高楼的高度,小青则需要使用最少的积木建出高度大于N的高楼
给出小蓝所报出的数字N,及已有积木块每一块的高度,请你帮助小青找出最少需要多少块积木可以搭建出高度大于N的高楼。例如: N = 12 N=12 N=12时,已有 4 4 4个积木块的高度分别为 4 , 7 , 8 , 4 4,7,8,4 4,7,8,4则最少需要 2 2 2块积木,可以使格建的高楼高度大于 12 12 12, 2 2 2块积木为 7 7 7和 8 8 8。
输入描述
第一行输入一个正整数
N
N
N,表示小蓝报出的数字。
第二行输入多个正整数,表示已有积木块每一块的高度,正整数之间以一个英文逗号隔开。(要求所有正整数之和大于
N
N
N)
输出描述
输出最少需要使用多少块积木,可以搭建出高度大于 N N N的高楼。
输入样例
12
4,7,8,4
输出样例
2
代码实现
n = eval(input())
a = list(eval(input()))
a.sort(reverse = True)
ans = 0
for x in a:
n -= x
ans += 1
if n < 0:
break
print(ans)
第四题(初中高级组均要考)
N N N个小朋友围成一圈( N ≤ 60 N\le60 N≤60),并按照顺序进行编号(编号 1 1 1到 N N N),然后从编号为 1 1 1的小朋友开始持续报数,当报到的数字中含 3 3 3或者数字是 3 3 3的倍数的小朋友,不能报数字而是报“过”(例如: 3 , 6 , 13 , 31 3,6,13,31 3,6,13,31这些数字都报“过”)。
一次游戏中,小朋友们玩的不亦乐乎,突然有小朋友发现前边报过的数字中已经有报错的,而后边小朋友还在继续报数。请你帮助小朋友找出第一次报错的小朋友是编号几。
例如:有 3 3 3个小朋友,编号为 1 , 2 , 3 1,2,3 1,2,3。编号 1 1 1的小朋友报 1 1 1、编号 2 2 2的小朋友报 2 2 2、编号 3 3 3的小朋友报“过“,编号 1 1 1的小朋友报 4 4 4,编号 2 2 2的小朋友报 5 5 5、编号 3 3 3的小朋友报 6 6 6、编号 1 1 1的小朋友报 7 7 7。此时第一次报错的小朋友为编号 3 3 3。因为编号 3 3 3的小朋友应该报“过“时,报成了 6 6 6,而 6 6 6是 3 3 3的倍数。
输入描述
第一行输入一个正整数 N N N,表示小朋友的人数。
第二行输入一组有错的报数序列(使用 0 0 0表示含 3 3 3或者是 3 3 3的倍数的数字),序列元素之间以一个英文逗隔开。
输出描述
输出第一次报错的小朋友是编号几。
输入样例
3
1,2,0,4,5,6,7
输出样例
3
代码实现
n = eval(input())
a = list(eval(input()))
ans = 0 # 出错小朋友编号
for i in range(len(a)):
c = i + 1 # 正确报数
if c % 3 == 0 or "3" in str(c):
c = 0
if c != a[i]: # 出错了
ans = i % n + 1 #出错小朋友的编号
break
print(ans)
第五题(初中高级组均要考)
有 N N N个正整数,现对 N N N个正整数进行不同方式的排列,每次排列后都会按照以下规则进行一次计算,聪明的小蓝发现,排列方式不同,最后计算出的结果也不相同。
计算规则:
- 第一次:第一个数乘以第二个数乘以第三个数,结果记录为 M ( 1 ) M(1) M(1);
- 第二次:第二个数乘以第三个数乘以第四个数,结果记录为 M ( 2 ) M(2) M(2);
- 第三次:第三个数乘以第四个数乘以第五个数,结果记录为 M ( 3 ) ; M(3); M(3);
- …
- 第 N − 2 N-2 N−2次:第 N − 2 个 N-2个 N−2个数乘以第 N − 1 N-1 N−1个数乘以第 N N N个数,结果记录为 M ( N − 2 ) M(N-2) M(N−2)。
最后计算 M ( 1 ) + M ( 2 ) + M ( 3 ) . . … . M ( N − 2 ) M(1)+M(2)+M(3)..….M(N-2) M(1)+M(2)+M(3)..….M(N−2)的数值。找出一种排列方式使这个数值最大。
例如:
N
=
4
N=4
N=4,
4
4
4个正整数分别为
1
,
2
,
3
,
4
1,2,3,4
1,2,3,4,那么排列方式就会有
24
24
24种,其中排列方式为
1
,
3
,
4
,
2
1,3,4,2
1,3,4,2时,按照规则计算
2
2
2次:
1
×
3
×
4
=
12
1\times3\times4=12
1×3×4=12,
3
×
4
∗
2
=
24
3\times4*2=24
3×4∗2=24,乘积相加:
12
+
24
=
36
12+24=36
12+24=36这种排序方式是所有乘积相加的数值最大,为
36
36
36。
输入描述
输入 N N N个正整数(KaTeX parse error: Undefined control sequence: \leN at position 2: 3\̲l̲e̲N̲),正整教之间一个英文逗号隔开。
输出描述
找出所有乘积相加的数值最大的排列方式,并输出数值
输入样例
1,2,3,4
输出样例
36
代码实现
import itertools # 迭代器,python内置模块
a = list(eval(input()))
n = len(a)
ans = 0
permutations = itertools.permutations(a) # 生成a的排列
for b in permutations:
s = 0
for i in range(n - 2):
s += b[i] * b[i + 1] * b[i + 2]
ans = max(ans, s)
print(ans)
第六题(中高级组均要考)
有一块农田被划分为 N × M N\times M N×M块,农作物和杂草分布生长在农田中,其中农作物使用大写字母 R R R表示,杂草使用大写字母 X X X表示。
请计算出农田中有几块独立的农作物区域(独立的农作物区域指该区域上下左右都被杂草围住,且 N × M N\times M N×M以外的区域都是杂草)。
例如:
N
=
4
,
M
=
4
,
4
×
4
N=4,M=4,4\times4
N=4,M=4,4×4的农田中农作物和杂草分布如下图,这块
4
×
4
4\times4
4×4的农田中有
3
3
3块独立的农作物区域(红色的3部分)。
输入描述
第一行输入两个整数 N N N和 M M M( 1 ≤ N ≤ 100 , 1 ≤ M ≤ 100 1\le N\le100,1\le M\le100 1≤N≤100,1≤M≤100), N N N表示农田的行数, M M M表示农田的列数,且两个正整数之间以一个英文逗号隔开。
接下来的 N N N行每行包括 M M M个字符(字符只能为 R R R或 X X X), R R R表示农作物, X X X表示杂草,字符之间以一个英文逗号隔开。
输出描述
输出一个整数,表示 N × M N\times M N×M的农田中有几块独立的农作物区域
输入样例
4,4
R,R,R,X
R,X,R,X
X,X,X,R
R,X,X,X
输出样例
3
代码实现
# 输入
n, m = eval(input())
g = []
for i in range(n):
g.append(list(input().split(',')))
ans = 0
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
# 广度优先搜索
def bfs(x, y):
q = []
g[x][y] = 'X' # flood fill
q.append((x, y))
while len(q) != 0:
x, y = q[0]
q.pop(0)
for i in range(4):
a = x + dx[i]
b = y + dy[i]
# 越界检查
if a < 0 or a >= n or b < 0 or b >= m:
continue
# 合法性检查
if g[a][b] == 'X':
continue
g[a][b] = 'X' # flood fill
q.append((a, b))
# 统计连通块个数
for i in range(n):
for j in range(m):
if g[i][j] == 'R':
ans += 1
bfs(i, j)
print(ans)
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)