蓝桥杯python组真题练习2

本文介绍了编程中的几个技术点,包括使用裁纸刀概念进行算法设计(如动态规划),计算两个数的最小公倍数,排列字母(利用ASCII码),以及判断两点是否在同一直线并计算直线属性。最后涉及纸张尺寸的计算方法。
摘要由CSDN通过智能技术生成

目录

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])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hooray11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值