PAT(乙级)2020年春季考试 7-1 对称日 (15分)
7-1 对称日 (15分)
央视新闻发了一条微博,指出 2020 年有个罕见的“对称日”,即 2020 年 2 月 2 日,按照 年年年年月月日日 格式组成的字符串 20200202 是完全对称的。
给定任意一个日期,本题就请你写程序判断一下,这是不是一个对称日?
输入格式:
输入首先在第一行给出正整数 N(1)。随后 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
代码讲解:此题需要善用sprintf ,首先先把输入拆分成年月日,之后,和已
准备好的字符串数组元素对比,去判断月份到底是几月,最后利用sprintf去
将年月日放进字符串数组当中最后输出。。
1 #include<stdio.h> 2 #include<string.h> 3 int check(char a[]) 4 { 5 int i=0,str=strlen(a); 6 while(i<str/2&&a[i]==a[str-i-1]) i++; 7 return i==str/2?1:0; 8 } 9 int main() 10 { 11 char month[13][20]={"","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"},m[20],date[50]; 12 int day,year,i,n; 13 scanf("%d",&n); 14 while(n--) 15 { 16 scanf("%s %d,%d",m,&day,&year),i=1; 17 while(i<13&&strcmp(month[i],m))i++; 18 sprintf(date,"%04d%02d%02d",year,i,day); 19 printf("%s%s\n",check(date)?"Y ":"N ",date); 20 } 21 return 0; 22 }

浙公网安备 33010602011771号