第十三届(2022)蓝桥杯省赛python组部分真题(3)
·
文章目录
1 排列字母:2118
1.1 题目内容

1.2 题目分析
- 转换为列表后.sort()排序即可。
1.3 代码分析
import os
import sys
s = "WHERETHEREISAWILLTHEREISAWAY"
l = list(s)
l.sort()
print("".join(l))
2 裁纸刀:2060
2.1 题目内容

2.2 题目分析
- 一共打印出440个二维码,需要裁剪4(上下左右) + 439(裁剪出440个)次。
2.3 代码分析
import os
import sys
print(4 + 439)
3 纸张尺寸:2120
3.1 题目内容

3.2 题目分析
- 长每次都等于宽,宽等于长的一半:for循环来回交换。
- 找规律:
偶数:长 - 分子1189,宽 - 分子841,长和宽分母2的次幂相同,都等于a // 2。
奇数:长 - 分子841,宽 - 分子1189,长和宽分母2的次幂不同,长 - a // 2(小),宽 - a - a // 2(大)。
3.3 代码分析
import os
import sys
s = input()
a = int(s[1])
if a % 2 == 0:
b = a // 2
print(1189 // (2 ** b))
print(841 // (2 ** b))
else:
b = a // 2
c = a - b
print(841 // (2 ** b))
print(1189 // (2 ** c))
4 特殊时间:2119
4.1 题目内容

4.2 题目分析
- 推出合理的日月和时间。
- 0111,1011,1101,1110
- 0222,2022,2202,2220
- 1222,2122,2212,2221
- 1112,1121,1211,2111
- 1113,1131,1311
- 1114,1141,1411
- 1115,1151,1511
- 1116,1611
- 1117,1711
- 1118,1811
- 1119,1911
- 加粗的为合格的月日,乘上对应合格的时间后,个数为:
- 9个4,3个3,4个2。
- 最后再乘上年份,年份随意,都是4种。
4.3 代码分析
import os
import sys
l = [4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2]
print(sum(4 * l))
5 寻找整数:2131
5.1 题目内容

5.2 题目分析
- 法一:满足后几个数的数是等差数列,k = 7131746160,枚举每个数,判断表中每个数的余数是否符合,若全部符合,for else结构输出,退出程序。
- 法二:3是第一个被2除余1的数,然后是5,7,9…,每个数差2。
- 在这些被2除余1的数中找到第一个3除余2的数:5,然后是11,17…,每个数之间差lcm(2,3) = 6。
- 以此类推,判断表中每个数的余数是否符合,每个数之间差lcm(2,3,4,…,49)…。
5.3 代码分析
import os
import sys
mod = [0, 0, 1, 2, 1, 4, 5, 4, 1, 2, 9, 0, 5, 10, 11, 14, 9, 0, 11, 18, 9, 11, 11, 15, 17, 9,
23, 20, 25, 16, 29, 27, 25, 11, 17, 4, 29, 22, 37, 23, 9, 1, 11, 11, 33, 29, 15, 5, 41, 46]
for i in range(5458460249, 10 ** 17, 7131746160):
for a in range(2, 50):
if i % a != mod[a]: break
else:
print(i)
break
import os
import sys
from math import *
def lcm(a, b):
return a // gcd(a, b) * b
mod = [0, 0, 1, 2, 1, 4, 5, 4, 1, 2, 9, 0, 5, 10, 11, 14, 9, 0, 11, 18, 9, 11, 11, 15, 17, 9,
23, 20, 25, 16, 29, 27, 25, 11, 17, 4, 29, 22, 37, 23, 9, 1, 11, 11, 33, 29, 15, 5, 41, 46]
k = 2
res = mod[2] + 2 # 3
for i in range(3, 50):
while True:
if res % i == mod[i]:
k = lcm(k, i)
break
else:
res += k
print(res)
6 蜂巢:2134
6.1 题目内容

6.2 题目分析
- 坐标轴转化。
- 从0到5的坐标依次为[-2,0],[-1,1],[1,1],[2,0],[1,-1],[-1,-1]。
- dx <= dy:dy,只需要改变y即可。
- dx > dy:dy + (dx - dy) // 2 = (dy + dy) // 2,例如向下右移动时,每移动一次y,dx减少y,并且x本身就是y的2倍。
6.3 代码分析
import os
import sys
def change(x, y, d, b):
x = x + rdx[d] * b
y = y + rdy[d] * b
return x, y
rdx = [-2, -1, 1, 2, 1, -1]
rdy = [0, 1, 1, 0, -1, -1]
d1, p1, q1, d2, p2, q2 = map(int, input().split())
x1, y1 = 0, 0
a, b = change(x1, y1, d1, p1)
rx1, ry1 = change(a, b, (d1 + 2) % 6, q1)
c, d = change(x1, y1, d2, p2)
rx2, ry2 = change(c, d, (d2 + 2) % 6, q2)
dx = abs(rx1 - rx2)
dy = abs(ry1 - ry2)
if dx > dy:
print(dy + (dx - dy) // 2)
else:
print(dy)
7 矩形拼接:2154
7.1 题目内容

7.2 题目分析
- 边数最少可以为:4 / 6 / 8。
- (1) 3个矩形中的某个边都相等:4。
- (2) 2个矩形中的某个边相等:6。
- (3) 1个矩形的某个边 = 另2个矩形的某个边之和:最多6。
- (4) 在(3)的基础上,如果另2个矩形剩下的边相等:4。
7.3 代码分析
import os
import sys
def check1(x, y, z):
if x >= y and x >= z:
if x == y + z:
return True
if y >= x and y >= z:
if y == x + z:
return True
if z >= x and z >= y:
if z == x + y:
return True
return False
def check2(x, y, z):
if x >= y and x >= z:
if x == y + z and a[2] + a[3] - y == a[4] + a[5] - z:
return True
if y >= x and y >= z:
if y == x + z and a[0] + a[1] - x == a[4] + a[5] - z:
return True
if z >= x and z >= y:
if z == x + y and a[0] + a[1] - x == a[2] + a[3] - y:
return True
return False
t = int(input())
for m in range(t):
a = list(map(int, input().split()))
re = 8
for i in range(2):
for j in range(2, 4):
for k in range(4, 6):
x1, x2, x3 = a[i], a[j], a[k]
if x1 == x2 == x3:
re = min(re, 4)
if x1 == x2 or x1 == x3 or x2 == x3:
re = min(re, 6)
if check1(x1, x2, x3):
re = min(re, 6)
if check2(x1, x2, x3):
re = min(re, 4)
print(re)
总结
本文介绍了第十三届(2022年)蓝桥杯python组省赛的部分真题。
更多推荐
所有评论(0)