为了追求严谨,把日期的所有可能性分析得比较仔细,代码写了快200行,当然出现了超时的情况,可以借鉴一下
#include <stdio.h> #include <math.h> int a[8],date,i,b,temp,year,p,count; int
main() { count=0; scanf("%d",&date); temp=date; while(date<=99999999) { p=date;
for(i=0;i<=7;i++) { b=pow(10,7-i); a[i]=p/b; p=p-a[i]*b; }
if(a[0]==a[7]&&a[1]==a[6]&&a[2]==a[5]&&a[3]==a[4]&&(a[4]*10+a[5]<=12)) {
if(a[4]==0&&(a[5]==1||a[5]==3||a[5]==5||a[5]==7||a[5]==8)) {
if(a[6]*10+a[7]<=31&&a[6]*10+a[7]>0) { printf("%d\n",date); count++; break; } }
if(a[4]==1&&(a[5]==0||a[5]==2)) { if(a[6]*10+a[7]<=30&&a[6]*10+a[7]>0) {
printf("%d\n",date); count++; break; } }
if(a[4]==0&&(a[5]==4||a[5]==6||a[5]==9)) { if(a[6]*10+a[7]<=30&&a[6]*10+a[7]>0)
{ printf("%d\n",date); count++; break; } } if(a[4]==1&&a[5]==1) {
if(a[6]*10+a[7]<=30&&a[6]*10+a[7]>0) { printf("%d\n",date); count++; break; } }
if(a[4]==0&&a[5]==2) { year=a[0]*1000+a[1]*100+a[2]*10+a[3];
if(year%4==0&&year%100!=0) { if(a[6]*10+a[7]<=29&&a[6]*10+a[7]>0) {
printf("%d\n",date); count++; break; } } if(year%400==0) {
if(a[6]*10+a[7]<=29&&a[6]*10+a[7]>0) { printf("%d\n",date); count++; break; } }
else { if(a[6]*10+a[7]<=28&&a[6]*10+a[7]>0) { printf("%d\n",date); count++;
break; } } } } date++; } if(count==0) { printf("\n"); } count=0;
while(temp<=99999999) { p=temp; for(i=0;i<=7;i++) { b=pow(10,7-i); a[i]=p/b;
p=p-a[i]*b; }
if(a[0]==a[7]&&a[0]==a[2]&&a[0]==a[5]&&a[1]==a[6]&&a[1]==a[4]&&a[1]==a[3]&&(a[4]*10+a[5]<=12))
{ if(a[4]==0&&(a[5]==1||a[5]==3||a[5]==5||a[5]==7||a[5]==8)) {
if(a[6]*10+a[7]<=31&&a[6]*10+a[7]>0) { printf("%d",temp); count++; break; } }
if(a[4]==1&&(a[5]==0||a[5]==2)) { if(a[6]*10+a[7]<=30&&a[6]*10+a[7]>0) {
printf("%d",temp); count++; break; } } if(a[4]==0&&(a[5]==4||a[5]==6||a[5]==9))
{ if(a[6]*10+a[7]<=30&&a[6]*10+a[7]>0) { printf("%d",temp); count++; break; } }
if(a[4]==1&&a[5]==1) { if(a[6]*10+a[7]<=30&&a[6]*10+a[7]>0) {
printf("%d",temp); count++; break; } } if(a[4]==0&&a[5]==2) {
year=a[0]*1000+a[1]*100+a[2]*10+a[3]; if(year%4==0&&year%100!=0) {
if(a[6]*10+a[7]<=29&&a[6]*10+a[7]>0) { printf("%d",temp); count++; break; } }
if(year%400==0) { if(a[6]*10+a[7]<=29&&a[6]*10+a[7]>0) { printf("%d",temp);
count++; break; } } else { if(a[6]*10+a[7]<=28&&a[6]*10+a[7]>0) {
printf("%d",temp); count++; break; } } } } temp++; } if(count==0) {
printf("\n"); } }
 

这里需要特别注意一下,日期的范围不应该只给到89991231,否则有一个评测点过不了,日期的范围最好给到99999999 

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信