大体思路:
直接把生日用char[]数组存起来,因为给的生日格式是固定的,比较谁小谁老直接比较字符就行;
然后根据人的年龄排序,筛除不合适的人;
最后注意结果为0的特殊情况
#include<bits/stdc++.h>
using namespace std;
struct pe{
char name[10];
char bir[20];
}a[100005];
bool cmp(const pe& s1,const pe& s2){
int flag=strcmp(s1.bir,s2.bir);//从大到小排
return flag>=0; //这里神奇的发现直接return strcmp(s1.bir,s2.bir)不行
//应该是sort的cmp只能接收1 和0。负数处理不了
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++)
scanf("%s %s",&a[i].name,&a[i].bir);
sort(a,a+n,cmp);
int ans=n;
char young[20],old[20];
for(int i=0;i<n;i++){
if(strcmp(a[i].bir,"2014/09/06")>0)ans--;
else{
strcpy(young,a[i].name);
break;
}
}
for(int i=n-1;i>=0;i--){
if(strcmp(a[i].bir,"1814/09/06")<0)ans--;
else{
strcpy(old,a[i].name);
break;
}
}
if(ans==0)printf("0\n");
else printf("%d %s %s\n",ans,old,young);
}
return 0;
}