目录
1.裁纸刀
import os
import sys
# 请在此输入您的代码
sum = 4
sum += 19
sum += 21*20
print(sum)
2.路径
- 这道题涉及到求两个数的最小公倍数。
- 一开始我的想法是用深度或者广度搜素去做,很显然不是那么合适,然后就想到动态规划先求局部最优解,最终求得问题的最优解。
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.排列字母
- 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.直线
- 数学知识:怎么判断两个点在一条直线上,如何确定一条直线。
- 计算直线的斜率和截距。
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.纸张尺寸
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])