![在这里插入图片描述](https://img-blog.csdnimg.cn/20200327100616433.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTIwOTkzMTY1,size_16,color_FFFFFF,t_70)
注意点
- 注意边界条件,1814/09/06和2014/09/06也算合法年龄
- 本题使用结构体简洁方便,且和上题一样,不需要把所有输入的数据都保存,只需要输入时进行判断,保存最年轻的和最年长的人的信息,并对年龄是否合法进行判断,记录总数
- 输入09时匹配%d时只会匹配到9
#include <bits/stdc++.h>
using namespace std;
struct Person{
char name[10];
int yy,mm,dd;
}left1,right1,oldest,youngest,t;
bool cmp(Person a,Person b){
if(a.yy!=b.yy)return a.yy>=b.yy;
else if(a.mm!=b.mm)return a.mm>=b.mm;
else return a.dd>=b.dd;
}
void init(){
left1.yy=youngest.yy=1814;
right1.yy=oldest.yy=2014;
left1.mm=right1.mm=oldest.mm=youngest.mm=9;
left1.dd=right1.dd=oldest.dd=oldest.dd=6;
}
int main(){
init();
int n,sum=0;
scanf("%d",&n);
while(n--){
scanf("%s %d/%d/%d",t.name,&t.yy,&t.mm,&t.dd);
if(cmp(t,left1)&&cmp(right1,t))sum++;
else continue;
if(cmp(t,youngest))youngest=t;
if(cmp(oldest,t))oldest=t;
}
if(sum!=0) printf("%d %s %s",sum,oldest.name,youngest.name);
else printf("0");
return 0;
}