日期统计

代码如下:
python
import datetime
str_list = "5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3"
start = datetime.date(2023, 1, 1)
end = datetime.date(2023, 12, 31)
ans = 0
while start <= end:
day = start.strftime('%Y%m%d')
res = 0
for i in range(len(str_list)):
if res == 8:
ans += 1
break
elif day[res] == str_list[i]:
res += 1
start += datetime.timedelta(days = 1)
print(ans)
日期问题

代码如下:
python
import datetime
def main():
s = input().strip()
a, b, c = map(int, s.split('/'))
ans = []
#暴力枚举所有可能的日期
for year in range(1960, 2060):
for month in range(1, 13):
for day in range(1, 32):#最多31天,不合法的让datetime报错
try:
t = datetime.date(year, month, day)
if year % 100 == a and month == b and day == c:
ans.append(t)
elif year % 100== c and month == a and day == b:
ans.append(t)
elif year % 100 == c and month == b and day == a:
ans.append(t)
except ValueError:#日期不合法,跳过
continue
ans = set(ans)
for x in sorted(ans):
print(x.strftime("%Y-%m-%d"))
if __name__ == '__main__':
main()
回文日期


代码如下:
python
import datetime
n = int(input())
year = n // 10000
month = n % 10000 // 100
day = n % 100
t = datetime.date(year, month, day)
found_first = False
while True:
#此时t的格式是"%Y-%m-%d"
t += datetime.timedelta(days = 1)
#将时间格式化为字符串格式
#也可以写成d = t.strftime("%Y%m%d")
d = str(t).replace('-', '')
if d == d[::-1] and not found_first:
found_first = True
print(d)
#注意这里是if,不是elif,如果写成elif会有一组数据无法通过(即当两种天是同一天的时候无法判断)
if d[0] == d[2] == d[5] == d[7] and d[1] == d[3] == d[4] == d[6]:
print(d)
break
合法日期


python
import datetime
m = int(input())
d = int(input())
try:
t = datetime.date(2021, m, d)
print("yes")
except ValueError:
print("no")
顺子日期

代码如下:
python
import datetime
num = 0
for month in range(1, 13):
for day in range(1, 32):
try:
t = datetime.date(2022, month, day)
str_t = t.strftime("%Y%m%d")
if "012" in str_t or "123" in str_t:
num += 1
except ValueError:
continue
print(num)
特殊日期(模拟赛)

代码如下:(运行时间较长但结果是对的)
python
import datetime
start = datetime.date(1900, 1, 1)
end = datetime.date(9999, 12, 31)
ans = 0
while start < end:
t = list(start.strftime("%Y%m%d"))
sum1 = sum(map(int, t[0:4]))
sum2 = sum(map(int, t[4:8]))
if sum1 == sum2:
ans += 1
start += datetime.timedelta(days=1)
print(ans)
特殊日期

代码如下:
python
def is_leap(year):
return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
def month_day(year, month):
if month in [4, 6, 9, 11]:
return 30
elif month == 2:
return 29 if is_leap(year) else 28
else:
return 31
def solve():
ans = 0
for year in range(2000, 2000000):
valid_month = [m for m in range(1, 13) if year % m == 0]
for m in valid_month:
valid_days = [d for d in range(1, month_day(year, m) + 1) if year % d == 0]
ans += len(valid_days)
print(ans + 1)
if __name__ == '__main__':
solve()
日期格式


代码如下:
python
day = ['a', 'Jan', 'Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
m, d = map(int, input().split())
month = day[m]
d_str = '0' + str(d) if len(str(d)) == 1 else str(d)
print(month, d_str, sep = '')
跑步

代码如下:
python
import datetime
start = datetime.date(2022, 1, 1)
end = datetime.date(2022, 12, 31)
ans = 0
while start <= end:
t_str = start.strftime("%Y%m%d")
t = t_str[-1]
if start.weekday() == 5 or start.weekday() == 6 or t == '1':
ans += 1
start += datetime.timedelta(days = 1)
print(ans)
一年中的第几天

代码如下:
python
import datetime
while True:
y, m, d = map(int, input().split())
if y == 0 and m == 0 and d == 0:
break
start = datetime.date(y, 1, 1)
end = datetime.date(y, m, d)
ans = 0
while start <= end:
start += datetime.timedelta(days=1)
ans += 1
print(ans)
python
import datetime
while True:
y, m, d = map(int, input().split())
if y == 0 and m == 0 and d == 0:
break
start = datetime.date(y, 1, 1)
end = datetime.date(y, m, d)
ans = (end - start).days + 1
print(ans)
岁月流转

代码如下:
python
import datetime
start = datetime.date(1901, 1, 1)
end = datetime.date(2000, 12, 31)
ans = 0
while start <= end:
if start.weekday() == 6 and start.day == 1:
ans += 1
start += datetime.timedelta(days=1)
print(ans)
神奇的闹钟


代码如下:
python
import datetime
t = int(input())
for _ in range(t):
s = input().split()
start = datetime.datetime(1970, 1, 1,0, 0, 0)
#strptime() 要求格式字符串必须与待解析的字符串完全匹配,包括空格、分隔符等
end = datetime.datetime.strptime(s[0] + s[1], '%Y-%m-%d%H:%M:%S')
x = int(s[2])
delta = end - start
n = delta // datetime.timedelta(minutes = x)
ans = (start + n * datetime.timedelta(minutes = x)).strftime('%Y-%m-%d %H:%M:%S')
print(ans)
直接 print(ans) 的输出格式是固定的:YYYY-MM-DD HH:MM:SS,这恰好和题目要求的格式一致,所以看起来不需要转换。
为什么代码中要显式使用 strftime?
-
代码意图明确:明确表示要输出特定格式的字符串
-
格式可控:如果题目要求不同的格式(如没有空格),strftime 可以灵活调整
-
类型安全:确保输出的是字符串而不是对象
艺术与篮球


代码如下:
python
import datetime
dic = [13, 1, 2, 3, 5, 4, 4, 2, 2, 2]
start = datetime.date(2000, 1, 1)
end = datetime.date(2024, 4, 13)
ans = 0
while start <= end:
d_lst = list(map(int, start.strftime('%Y%m%d')))
d_sum = 0
for d in d_lst:
d_sum += dic[d]
if d_sum > 50:
ans += 1
start += datetime.timedelta(days=1)
print(ans)