这是题目的链接https://www.patest.cn/contests/pat-b-practise/1028
实在不知道究竟错哪儿,边界也考虑进去了啊。很简单的题,本人新手一枚望大神指点错误之处。
#include <stdio.h>
struct People
{
char name[6];
int year;
int month;
int day;
} ;
typedef struct People People;
int Compare(People p1,People p2) //p1与p2相比 (返回1代表老,返回2代表相等,返回0代表小于)
{
int ret = 2;
if(p1.year < p2.year)
{
ret = 1;
}else
if(p1. year == p2.year)
{
if(p1.month < p2.month)
{
ret = 1;
}else
if(p1.month == p2.month)
{
if(p1.day < p2.day)
{
ret = 1;
}else
if(p1.day == p2.day)
{
ret = 2;
}
}
}else
ret = 0;
return ret;
}
int main ()
{
int amount;
People oldest = {.year = 2014,.month = 9,.day = 6};
People youngest = {.year = 1814,.month = 9,.day = 6};
People old = {.year = 1814,.month = 9,.day = 6}; //必须要年轻于或等于这个日期
People young = {.year = 2014,.month = 9,.day = 6}; //必须老于或等于这个日期
People input[100000];
int cnt = 0;
scanf("%d",&amount);
int i;
for(i = 0;i < amount;i++)
{
scanf("%s",&input[i].name); //思考对空格的处理
scanf("%d/%d/%d",&input[i].year,&input[i].month,&input[i].day);
}
for(i = 0;i < amount;i++)
{
if((Compare(input[i],young) == 1 || Compare(input[i],young) == 2)&&(Compare(input[i],old) == 0 || Compare(input[i],old) == 2)) //大于等于1814 9 6 小于等于 2014 9 6
{
cnt++;
if(Compare(input[i],youngest) == 0 || Compare(input[i],youngest) == 2) //年轻于或等于最年轻的,则替换最年的数据
{
youngest = input[i];
}
if(Compare(input[i],oldest) == 1 ||Compare(input[i],oldest) == 2) //老于或等于最年长的,则替换最年长的数据
{
oldest = input[i];
}
}
}
if(cnt != 0)
{
printf("%d ",cnt);
printf("%s ",oldest.name);
printf("%s",youngest.name);
}else
if(cnt == 0)
{
printf("0");
}
return 0;
}