前言
考前19天,今天增加4道左右中等难度试题
1、回文日期
import datetime
date=input()
y=int(date[0:4])
m=int(date[4:6])
d=int(date[6:])
dd=datetime.date(y,m,d)//转成日期格式
flag=True
for i in range(9999999):
dd=dd+datetime.timedelta(days=1)//每次加一天
strdd=str(dd).replace("-",'')//变换格式
if strdd==strdd[::-1]://满足倒序==对称
if flag:
print(strdd)
flag=False
if strdd[0]==strdd[2]==strdd[-1]==strdd[-3] and strdd[1]==strdd[3]==strdd[-2]==strdd[-4]://回文判断
print(strdd)
break
这题要了解date库,以及datetime格式
2、练习
print("ABC")
别说这题上来忘记要给字符串+“”了
3、分糖果
N=int(input())
s=list(map(int,input().split()))
ans=sum(s)//初试糖果总数
a=s[0]//2//第一个孩子给出的糖果
while len(s)!=s.count(s[0]):
for i in range(N):
if i+1==N:
i=-1
s[i+1],a=s[i+1]+a-s[i+1]//2,s[i+1]//2//赋值
if s[i+1]%2!=0:
s[i+1]+=1
ans=sum(s)-ans
print(ans)
count的意思是,参数在整个list中出现的次数,当所有元素值相同时,等于list长度。
4、全排列
from itertools import permutations as pt
N=list(input())
for i in pt(N):
print("".join(i))
这题和之前的很相似,就是通过使用permutations,枚举排列每种可能
5、Excel地址
import os
import sys
# 请在此输入您的代码
n=int(input())
ans=[]
while n!=0:
if n%26==0:
ans.append(26)//整除就是26
n=n//26-1
else:
ans.append(n%26)//有余数就+余数进去
n//=26
for i in range(len(ans)):
print(chr(ans[len(ans)-i-1]+64),end='')
这题append是添加在列表末尾,所以循环时从末尾向前,因为进位是除的次数越多,值就越大,最先出来的就是除的次数最多的。
6、绳结
a=[[0 for i in range(101)] for i in range(101)]//初始化矩阵
a[1][1]=1//绳子1和绳子1打结的方式只有一种
for i in range(2,len(a))://遍历矩阵,加绳子
for j in range(1,len(a[i]))://圈数
if i<j://节数要大于圈数
break
else:
a[i][j]=a[i-1][j]*(2*i-2)/(2*i-1)+a[i-1][j-1]/(2*i-1)//动态规划
Max=0
Max_num=1
for i in range(1,101):
if Max<a[100][i]://查找最大概率位置
Max_num=i
Max=a[100][i]
print(Max_num)
这题确实挺难,动态规划有的时候还好,有时想也想不出来。
7、排列字母
b="WHERETHEREISAWILLTHEREISAWAY"
c=[]
for i in b:
c.append(i)
c.sort()
for i in c:
print(i,end="")
这题就考一个sort排序,比肉眼快
8、修建灌木
n=int(input())
for i in range(n):
ld=i-0//左边界
rd=n-i-1//右边界
print(2*max(ld,rd))//来回的距离所以*2
9、顺子日期
res=0
for i in range(1,13):
for j in range(1,32):
s="2022%02d%02d" %(i,j)
if "012" in s or "123" in s://月份和日号之间只有两种顺子
res+=1
print(res)
建议大家先把思想转变过来,python中str是很容易做判断的,不需要一位一位排查
10、刷题统计
a,b,n=map(int,input().split())
week=a*5+b*2//每周做题数
days=(n//week)*7//周数*7
n%=week//剩余题数
if n<=5*a://工作日就干完了
days+=n//a+(0 if n%a==0 else 1)
else://休息日还得加班
days+=5
n-=5*a
days+=n//b+(0 if n%b==0 else 1)
print(days)
结语
今天刷了十八九道吧,但中等没刷,可能是有点疲惫吧,希望后面继续努力,减少看题解的速度。