PAT乙级_1111 对称日_Python_AC解法_无疑难点
注意事项:
因为笔者的编程水平以自学为主,代码结构可能比较混乱、变量命名可能不够规范。
文章中的AC解法不一定最优,并且包含笔者强烈的个人风格,不喜勿喷,但欢迎在评论中理性讨论或者给出提升建议。
文章中提到的疑难点仅为个人在刷题过程中所遇到的情况,如有读者存在其他疑难点,欢迎在评论中加以补充,笔者会尽量将其加入到文章内容中。
合集:
PAT乙级_合集_Python_AC解法
题目:
1111 对称日
题目描述:
央视新闻发了一条微博,指出 2020 年有个罕见的“对称日”,即 2020 年 2 月 2 日,按照 年年年年月月日日
格式组成的字符串 20200202 是完全对称的。
给定任意一个日期,本题就请你写程序判断一下,这是不是一个对称日?
输入格式:
输入首先在第一行给出正整数 N(1<N≤10)。随后 N 行,每行给出一个日期,却是按英文习惯的格式:Month Day, Year
。其中 Month
是月份的缩写,对应如下:
- 一月:Jan
- 二月:Feb
- 三月:Mar
- 四月:Apr
- 五月:May
- 六月:Jun
- 七月:Jul
- 八月:Aug
- 九月:Sep
- 十月:Oct
- 十一月:Nov
- 十二月:Dec
Day
是月份中的日期,为 [1, 31] 区间内的整数;Year
是年份,为 [1, 9999] 区间内的整数。
输出格式:
对每一个给定的日期,在一行中先输出 Y
如果这是一个对称日,否则输出 N
;随后空一格,输出日期对应的 年年年年月月日日
格式组成的字符串。
输入样例:
5
Feb 2, 2020
Mar 7, 2020
Oct 10, 101
Nov 21, 1211
Dec 29, 1229
输出样例:
Y 20200202
N 20200307
Y 01011010
Y 12111121
N 12291229
代码限制:
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
AC解法:
# 数据预处理
moon = ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
# 预先生成月份缩写对应表# 获取输入的数据
n = int(input()) # 获取首行输入的数量 n# 处理结果并输出
for _ in range(n): # 遍历每行输入的日期month, day, year = input().split() # 切分输入的日期数据m, d, y = moon.index(month), int(day[:-1]), int(year) # 将切分的日期数据转化成整型,# 其中 m 通过对应表中的下标得到, d 通过去除尾部的逗号得到, y 则是直接使用 int 转化result = f"{y:04d}{m:02d}{d:02d}" # 拼接出 8 位日期if result == result[::-1]: # 若日期正序等于倒序print(f"Y {result}") # 按格式要求输出 Y 的情况else: # 若日期正序不等于倒序print(f"N {result}") # 按格式要求输出 N 的情况
题目解读:
本题描述比较易懂。
先获取输入的数据,再逐个处理日期数据转化为 8 位数字的形式,最后根据其正序与逆序的相等情况输出对应的结果。
疑难点:
本题无疑难点。