蓝桥杯python组真题练习2

发布于:2024-04-07 ⋅ 阅读:(160) ⋅ 点赞:(0)

目录

1.裁纸刀 

2.路径

3.排列字母

4.直线

5.纸张尺寸


1.裁纸刀 

11.裁纸刀 - 蓝桥云课 (lanqiao.cn)

import os
import sys

# 请在此输入您的代码

sum = 4
sum += 19
sum += 21*20
print(sum)

2.路径

12.路径 - 蓝桥云课 (lanqiao.cn)

  • 这道题涉及到求两个数的最小公倍数。
  • 一开始我的想法是用深度或者广度搜素去做,很显然不是那么合适,然后就想到动态规划先求局部最优解,最终求得问题的最优解。
import os
import sys
import math

# 请在此输入您的代码
def gbs(a, b):
  return a*b//math.gcd(a,b)

dp = [0 for _ in range(2022)]
for i in range(1,2021):
  for j in range(i+1,i+22):
    if j >2021:
      break
    if dp[j] == 0:
      dp[j] = dp[i] + gbs(i,j)
    else:
      dp[j] = min(dp[j],dp[i]+gbs(i,j))
print(dp[2021])

3.排列字母

13.排列字母 - 蓝桥云课 (lanqiao.cn)

  • ord()可以将字符转换为ASCII码
  • chr()可以将ASCII码转换为字符
import os
import sys

# 请在此输入您的代码

s = 'WHERETHEREISAWILLTHEREISAWAY'
s = list(s)
a = [0 for _ in range(200)]
for i in s:
  a[ord(i)] += 1

for i in range(200):
  if a[i] != 0:
    print(chr(i)*a[i],end='')

4.直线

15.直线 - 蓝桥云课 (lanqiao.cn)

  • 数学知识:怎么判断两个点在一条直线上,如何确定一条直线。
  • 计算直线的斜率和截距。
import os
import sys

s = set()

# 请在此输入您的代码
for x1 in range(20):
  for y1 in range(21):
    for x2 in range(20):
      for y2 in range(21):
        if x1 == x2:
          continue
        k = (y2-y1)/(x2-x1)
        b = (x2*y1-x1*y2)/(x2-x1)
        if (k,b) not in s:
          s.add((k,b))
print(len(s)+20)
    

5.纸张尺寸

1.纸张尺寸 - 蓝桥云课 (lanqiao.cn)

import os
import sys

# 请在此输入您的代码
l = 1189
w = 841
data = [[l,w]]
for i in range(1,10):
  ww = max(data[i-1])//2
  ll = min(data[i-1])
  data.append([ll,ww])

s = list(input())
num = int(s[1])
print(data[num][0])
print(data[num][1])

网站公告

今日签到

点亮在社区的每一天
去签到