我这个方法比较笨,但是也是一种思路,感兴趣的可以读一遍
#include<stdio.h>
typedef struct{
char name[5];
int year, month, day;
}person;
int cmp(const void *a, const void *b)
{
person one = *(person *)a;
person two = *(person *)b;
if(one.year > two.year)
return 1;
else if(one.year < two.year)
return -1;
if(one.year == two.year)
{
if(one.month > two.month)
return 1;
if(one.month < two.month)
return -1;
if(one.month == two.month)
{
if(one.day > two.day)
return 1;
if(one.day < two.day)
return -1;
else
return 0;
}
}
}
int main(void)
{
int N, count= 0, i;
scanf("%d", &N);
person A[N], B[N];
for(i = 0; i < N; i++)
{
scanf("%s %d/%d/%d", &A[i].name, &A[i].year, &A[i].month, &A[i].day);
if(A[i].year == 2014 && A[i].month <= 9)
{
if(A[i].month == 9)
{
if(A[i].day <= 6)
B[count++] = A[i];
}
else
B[count++] = A[i];
}
if(A[i].year == 1814 && A[i].month >= 9)
{
if(A[i].month == 9)
{
if(A[i].day >= 6)
B[count++] = A[i];
}
else
B[count++] = A[i];
}
if(A[i].year > 1814 && A[i].year < 2014)
{
B[count++] = A[i];
}
}
qsort(B, count, sizeof(B[0]), cmp);
if(count != 0)
printf("%d %s %s", count, B[0].name,B[count -1].name );
else
printf("0");
return 0;
}