央视新闻发了一条微博,指出 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
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
//一月:Jan
//二月:Feb
//三月:Mar
//四月:Apr
//五月:May
//六月:Jun
//七月:Jul
//八月:Aug
//九月:Sep
//十月:Oct
//十一月:Nov
//十二月:Dec
//char month[4];
char ans[10];
int fun(char *s )
{
if(strcmp(s,"Jan")==0)
return 1;
else if(strcmp(s,"Feb")==0)
return 2;
else if(strcmp(s,"Mar")==0)
return 3;
else if(strcmp(s,"Apr")==0)
return 4;
else if(strcmp(s,"May")==0)
return 5;
else if(strcmp(s,"Jun")==0)
return 6;
else if(strcmp(s,"Jul")==0)
return 7;
else if(strcmp(s,"Aug")==0)
return 8;
else if(strcmp(s,"Sep")==0)
return 9;
else if(strcmp(s,"Oct")==0)
return 10;
else if(strcmp(s,"Nov")==0)
return 11;
else if(strcmp(s,"Dec")==0)
return 12;
}
int Judge()
{
int len=strlen(ans);
for(int i=0;i<len/2+1;i++)
if(ans[i]!=ans[len-1-i])
return 0;
return 1;
}
int main()
{
int n,day,year;
char s[10];
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%s%d, %d",s,&day,&year);
int month=fun(s);
int t=year*10000+month*100+day;
sprintf(ans,"%d",t);
int len=strlen(ans);
if(len!=8)
{
//下面处理前置0
int t=8-len;
char s1[10];
int i;
for(i=0;i<t;i++)
{
s1[i]='0';
}
s1[i]='\0';
strcat(s1,ans);
strcpy(ans,s1);
}
if(Judge())
cout<<"Y "<<ans<<endl;
else
cout<<"N "<<ans<<endl;
}
}