查看原题目请点我这里

解题思路
首先把合理的人员加入结构体中,在加入的时候顺便统计一下有多少个人,然后对结构体中合格的人员按照出生日期进行排序,得到最年长的在第一位,最年轻的在最后一位,直接输出就行了。是否是合理的人员通过check函数判断。
注意
当没有合格的人员时,直接输出0就行了。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1000005;
struct per{
    char name[8];
    int year,mon,day;
}E[maxn];
bool cmp(per a,per b){
    if(a.year != b.year)
        return a.year < b.year;
    else if(a.mon != b.mon)
        return a.mon  < b.mon;
    else 
        return a.day < b.day;
}
int check(int yy,int mm,int dd){
    if(yy<1814||yy>2014) 
        return 0;
    else if(yy==1814){
            if(mm < 9) return 0;
            else if(mm>9) return 1;
            else{
                if(dd>=6) return 1;
                else return 0;
            }
    }else if(yy==2014){
        if(mm > 9) return 0;
        else if(mm < 9) return 1;
        else{
            if(dd <= 6) return 1;
            else return 0;
        }
    }else return 1;
}
int main(){
    int N;
    scanf("%d",&N);
    char s[8];
    int y,m,d,k=0;
    for(int i=0;i<N;i++){
        scanf("%s %d/%d/%d",s,&y,&m,&d);
        int tag=check(y,m,d);
        if(tag==1){
            strcpy(E[k].name,s);
            E[k].year=y;
            E[k].mon=m;
            E[k].day=d;
            k++;
        }
    }
    sort(E,E+k,cmp);
    if(k==0) printf("0\n");
    else printf("%d %s %s\n",k,E[0].name,E[k-1].name);
    return 0;
}