题目
输入年、月、日三个整数,校验该日期是否合法,合法输出 yes,否则输出 no。
输入格式:输入一行包含三个整数 y m d,分别代表年、月、日,以空格分隔。
输出格式:若为有效合法日期输出 yes,否则输出 no,末尾换行。
数据范围与约定:1 ≤ y ≤ 9999。
思路与算法
1. 闰年规则与二月天数
能被 400 整除或能被 4 整除且不能被 100 整除的为闰年,闰年 2 月 29 天,平年 28 天。
2. 边界判定
月份需在 1~12 之间,日期需在 1~当月天数 之间。
完整程序
# 判断是否为闰年
def is_leap(y):
return y % 400 == 0 or (y % 4 == 0 and y % 100 != 0)
# 返回指定年月的合法天数
def days_in_month(y, m):
dim = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
return 29 if m == 2 and is_leap(y) else dim[m]
y, m, d = map(int, input().split())
# 严格校验月份与日期上下界
if 1 <= m <= 12 and 1 <= d <= days_in_month(y, m):
print('yes')
else:
print('no')运行示例
输入:
2024 2 29输出:
yes