题目

输入年、月、日三个整数,校验该日期是否合法,合法输出 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