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组省赛的部分真题。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐