wrong answer代码
部分测试数据为 【2000/2/22 2006/3/12 2200/11/3 2000/3/22 】
结果 【53 71 307 82】 皆正确
情况说明:
和ac代码区别主要是先输入字符串再进行处理。
因为怎么也找不到答案错误的测试数据,所以纠结了很久,看到题目里有强调:
“数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。”
于是怀疑是对输入字符串的处理有问题,或许oj用的数据不适用于我的代码(虽然还是不知道为什么)。
所以试了下使用了直接用%d和%c分割输入内容的方法,就通过了。
但还是不知道为什么前者报错……
#include <stdio.h>
void date(char a[],int n)
{
for(int i=0;i<n;i++)
{
a[i] -= 48;
}
}
int main()
{
char a[20];
int y,m,d,b[13];
for(int i=0;i<13;i++)
{
if(i==0||i==2||i==4||i==6||i==7||i==9||i==11) b[i]=31;
else if(i==3||i==5||i==8||i==10) b[i]=30;
else if(i==1) b[i]=28;
}
while(scanf("%s",a) != EOF)
{
int ans=0;
date(a,20);
y=1000*a[0]+100*a[1]+10*a[2]+a[3];
if (a[6]==-1)
{
m=a[5];
if(a[8]!= -48) d=a[7]*10+a[8];
else d=a[7];
}
else if(a[6]!=-1)
{
m=10+a[6];
if(a[9]!= -48) d=a[8]*10+a[9];
else d=a[8];
}
if((y%4 == 0&&y%100!=0)||y%400==0)
{
b[1] = 29;
for(int i=0;i<m-1;i++) ans += b[i];
ans += d;
b[1]=28;
}
else
{
for(int i=0;i<m-1;i++) ans += b[i];
ans += d;
}
printf("%d\n",ans);
}
return 0;
}
ac代码
#include <stdio.h>
#include<math.h>
/*void date(char a[],int n)
{
for(int i=0;i<n;i++)
{
a[i] -= 48;
}
}*/
int main()
{
//char a[20];
char p,q;
int y,m,d,b[13];//not here for int ans
for(int i=0;i<13;i++)
{
if(i==0||i==2||i==4||i==6||i==7||i==9||i==11) b[i]=31;
else if(i==3||i==5||i==8||i==10) b[i]=30;
else if(i==1) b[i]=28;
}
//while(scanf("%s",a) != EOF)
while(scanf("%d%c%d%c%d",&y,&p,&m,&q,&d)!=EOF)
{
int ans=0;//but here for int ans
/*date(a,20);
y=1000*a[0]+100*a[1]+10*a[2]+a[3];
if (a[6]==-1)
{
m=a[5];
if(a[8]!= -48) d=a[7]*10+a[8];
else d=a[7];
}
else if(a[6]!=-1)
{
m=10+a[6];
if(a[9]!= -48) d=a[8]*10+a[9];
else d=a[8];
}*/
if((y%4 == 0&&y%100!=0)||y%400==0)//闰年定义是①是4的倍数但不是100的倍数②是400的倍数
{
b[1] = 29; //之前是ans++,因为有可能比2月小所以不能这样
for(int i=0;i<m-1;i++) ans += b[i];
ans += d;
b[1]=28;
}
else
{
for(int i=0;i<m-1;i++) ans += b[i];
ans += d;
}
printf("%d\n",ans);
}
return 0;
}