今天做了人口普查这道题,做到最后死活有一个测试点不能通过,最后 实在是想不出来了,百度了一下,才发现,这个测试点是当没有合理的生日时,只要输出0就可以了。感觉是被题目中的那句保证最年长和最年轻的人没有并列迷惑住了。村里没有合法生日当然也就没有并列了啊!!!!
下面贴上我写的一团糟的代码
#include<stdio.h>
#include<string.h>
int jugde(int y,int m,int d);
struct village{
char name[10];
int year;
int month;
int day;
};
int main()
{
int n,i,e=0,flag=0;
struct village max,min,t;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s%d/%d/%d",t.name,&t.year,&t.month,&t.day);
if(jugde(t.year,t.month,t.day))
{
e++;
if(flag==0)
{
max=t;
min=t;
flag++;
}
if(t.year<max.year)
{
max=t;
}else if(t.year==max.year&&t.month<max.month)
{
max=t;
}
else if(t.year==max.year&&t.month==max.month&&t.day<max.day)
{
max=t;
}
if(t.year>min.year)
{
min=t;
}else if(t.year==min.year&&t.month>min.month)
{
min=t;
}
else if(t.year==min.year&&t.month==min.month&&t.day>min.day)
{
min=t;
}
}
}
if(e==0)
printf("0");
else
printf("%d %s %s",e,max.name,min.name);
return 0;
}
int jugde(int y,int m,int d)
{
int a=1;
if(y<1814||y>2014)
a=0;
else if((y==1814&&m<9)||(y==2014&&m>9))
a=0;
else if((y==1814&&m==9&&d<6)||(y==2014&&m==9&&d>6))
a=0;
return a;
}