碎碎念:不管之前有没有做过,遇到了统统再写,,,我爱傻瓜解法,我爱跑的比pycharm快的idle
两题傻瓜解法,注意判断条件的编写!!
之后可以总结一下一直记不住的知识点,,特别是时间库的运用和排列组合库,以及简单的dfs和动归
1.完全日期
"""
写过的题,粗暴直接的思路!一次就对了哈皮哈皮
"""
def weishuhe(x): # 计算数位和
tmp = 0
for i in str(x):
tmp += int(i)
return tmp
def pfs(x): # 计算是否平方数,观察到最大平方数也不会超过36
flag = False
for i in range(1,7):
if i**2 == x:
flag = True
return flag
def fals(y,m,d): # 删除不存在的日期
tmp = 0
if y%4==0 and m ==2 and d == 30 or y%4==0 and m == 2 and d == 31:
tmp -= 1
elif y%4!=0 and m==2 and d==30 or y%4!=0 and m==2 and d==31 or y%4!=0 and m==2 and d==29:
tmp -=1
elif m==4 or m==6 or m==9 or m==11:
if d == 31:
tmp -= 1
return tmp
cnt = 0
for y in range(2001,2022): # 遍历年月日
for m in range(1,13):
for d in range(1,32):
t = weishuhe(y)+weishuhe(m)+weishuhe(d)
if pfs(t):
cnt += 1
cnt += fals(y,m,d) # 减去不符合的日期
print(cnt)
2.寻找2020
"""
因为填空题,所以先运行得到结果再填写即可。所以可以使用循环输入来分解长字符串
编写判断条件时要注意范围不要超过。+3操作!!!
"""
data = []
cnt = 0
for i in range(300):
data.append(input())
for i in range(300):
for j in range(300):
if j+3<300 and data[i][j] == "2" and data[i][j+1] == "0" and data[i][j+2] == "2" and data[i][j+3] == "0":
cnt += 1
if i+3<300 and data[i][j] == "2" and data[i+1][j] == "0" and data[i+2][j] == "2" and data[i+3][j] == "0":
cnt+=1
if i+3<300 and j+3<300 and data[i][j]=="2" and data[i+1][j+1] == "0" and data[i+2][j+2] == "2" and data[i+3][j+3] == "0":
cnt += 1
print(cnt) # 16520