P5690为什么第三个测试点WA啊,弄了一早上了,有没有dalao能教教
#include <stdio.h>
#include <stdlib.h>
int main()
{
char d[6];
scanf("%s",d);
int m=(d[0]-'0')*10+(d[1]-'0'),day=(d[3]-'0')*10+(d[4]-'0'),s=0;//计算月份以及日期
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)//判断是否为大月
{
if(day<0||day>31)//判断日期是否正确
{
s+=(d[3]-'0')>=0&&(d[3]-'0')<=3?0:1;
s+=((d[3]-'0')==3?((d[4]-'0')==0||(d[4]-'0')==1?0:1):((d[3]-'0')==0?((d[4]-'0')>=1||(d[4]-'0')<=9?0:1):((d[4]-'0')>=0||(d[4]-'0')<=9?0:1)));
}
if(day==0)s++;//在日期为0的情况下,只需要把各位数改为1即可正确,所以为0加一
}
else if(m==4||m==6||m==9||m==11)//判断是否为小月
{
if(day<0||day>30)//判断日期是否正确
{
s+=(d[3]-'0')>=0&&(d[3]-'0')<=3?0:1;
s+=(d[3]-'0')==3?((d[4]-'0')==0?0:1):((d[3]-'0')==0?((d[4]-'0')>=1||(d[4]-'0')<=9?0:1):((d[4]-'0')>=0||(d[4]-'0')<=9?0:1));
}
if(day==0)s++;//在日期为0的情况下,只需要把各位数改为1即可正确,所以为0加一
}
else if(m==2)//判断是否为2月
{
if(day<0||day>28)
{
s+=(d[3]-'0')>=0&&(d[3]-'0')<=2?0:1;
s+=(d[3]-'0')==2?((d[4]-'0')>=0||(d[4]-'0')<=8?0:1):((d[3]-'0')==0?((d[4]-'0')>=1||(d[4]-'0')<=9?0:1):((d[4]-'0')>=0||(d[4]-'0')<=9?0:1));
}
if(day==0)s++;//在日期为0的情况下,只需要把各位数改为1即可正确,所以为0加一
}
else//遇到其他情况
{
s++;//月份不对的情况下不管是什么二位数,都只需要改一位就能正确
if(d[1]-'0'==1||d[1]-'0'==2||d[1]-'0'==3||d[1]-'0'==5||d[1]-'0'==7||d[1]-'0'==8||d[1]-'0'==0)
{//月份个位数为1,2,3,5,7,8,0时可以改为大月,3,5,7,8,10,11,12月为大月
if(day<0||day>31)//判断日期是否正确
{
s+=(d[3]-'0')>=0&&(d[3]-'0')<=3?0:1;
s+=(d[3]-'0')==3?((d[4]-'0')==0||(d[4]-'0')==1?0:1):((d[3]-'0')==0?((d[4]-'0')>=1||(d[4]-'0')<=9?0:1):((d[4]-'0')>=0||(d[4]-'0')<=9?0:1));
}
}
if(d[1]-'0'==4||d[1]-'0'==6||d[1]-'0'==9)
{//月份个位数为4,6,9时可以改为小月4,6,9月为小月
if(day<0||day>30)//判断日期是否正确
{
s+=(d[3]-'0')>=0&&(d[3]-'0')<=3?0:1;
s+=(d[3]-'0')==3?((d[4]-'0')==0?0:1):((d[3]-'0')==0?((d[4]-'0')>=1||(d[4]-'0')<=9?0:1):((d[4]-'0')>=0||(d[4]-'0')<=9?0:1));
}
}
if(day==0)s++;//在日期为0的情况下,只需要把各位数改为1即可正确,所以为0加一
}
printf("%d\n",s);
return 0;
}