1.门牌制作
答案:624
我的代码:
c = 0
for i in range(1,2021):
c += str(i).count("2")
print(c)
2.既约分数
答案: 2481215
(我在纠结是4962430还是2481215,纠结点是:分子分母倒过来算不算一个新的既约分数)
突破点:寻找最大公约数:
1.一般方法
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
2.欧几里得(未理解,后续补充)
我的代码
lt = []
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
for i in range(1, 2021):
for j in range(1, 2021):
if gcd(i, j) == 1:
lt.append(i)
lt.append(j)
print(len(lt))
3.蛇形填数
下意识是数学算法思维
(后续学习代码)
答案:761
4.跑步锻炼
分析:中间一度出错,单纯从每周一+2,月初+2的角度考虑,未考虑重复,代码变量名用month,day,week表示更明确
答案:8877
代码:
week = 6
sum = 0
for i in range(2000, 2021):
for mouth in range(1, 13):
if i == 2020 and mouth in [10, 11, 12]:
break
if mouth == 2 and (i % 400==0 or (i % 4 == 0 and i % 100 != 0)):
day = 29
elif mouth in [1, 3, 5, 7, 8, 10, 12]:
day = 31
elif mouth in [4, 6, 9, 11]:
day = 30
else:
day = 28
for k in range(1, day+1):
if k == 1 or week == 1:
sum += 2
else:
sum += 1
week += 1
if week == 8:
week = 1
print(sum)
5.七段码
分析:困惑:字符是指文字+数字?
来一波数学思维(哭哭哭)
亮一根,两根......分别讨论有几种
答案:80
6.成绩统计
分析:重点解决,未知个输入值问题
方法:
a = list() while True: try: a.append(int(input('输入:'))) except: break
a = list()
while True:
try:
a.append(int(input('输入:')))
except:
break
f = len(a)
b = 0
c = 0
d = 0
e = 0
for i in a:
if i >= 60:
b += 1
for i in a:
if i >= 85:
c += 1
d = b/f*100
d = round(d, 0)
e = c/f*100
e = round(c, 0)
print('及格率:', d, "%")
print('优秀率:', e, "%")
代码:有瑕疵(存在一点问题)
7.回文日期
分析:将其拆分为4位数+4位数,设置范围,AABB在范围内,若反过来BBAA也在范围内即成立,最近的一次,就是指符合条件的前四位数字最小(代码为半成品,好像理解错题意了)
for i in range(1000, 10000):
a = int(input('年份;'))
x = list(map(int, str(a)))
x1 = x[::-1]
b = lambda x1: int(''.join(str(j) for j in x1))
x2 = []
if 1000 < b <10000:
x2.append(b)
c = str(min(x2))
a = str(a)
剩下三道题,能力有限(哭,明天继续研究)