PTA B1028 人口普查

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fuckingone/article/details/82596941

判断是否在合法区间,再更新最年长和最年轻的人。

读入新日期来更新时,有可能同时更新最老和最年轻,不能用if ,else 

#include<cstdio>
struct person{
  char name[10];
  int yy,mm,dd;
}oldest,youngest,left,right,temp;

bool LessEqu(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;
}
bool MoreEqu(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(){
  youngest.yy=left.yy=1814;
  oldest.yy=right.yy=2014;
  youngest.mm=oldest.mm=left.mm=right.mm=9;
  youngest.dd=oldest.dd=left.dd=right.dd=6;
}
int main(){
  init();
  int n,num=0;
  scanf("%d",&n);
  for(int i=0;i<n;i++){
    scanf("%s %d/%d/%d",temp.name,&temp.yy,&temp.mm,&temp.dd);
    if(MoreEqu(temp,left)&&LessEqu(temp,right)){
      num++;
      if(LessEqu(temp,oldest))oldest=temp;
      if(MoreEqu(temp,youngest))youngest=temp;
    }
  }
  if(num==0)printf("0\n");
  else printf("%d %s %s\n",num,oldest.name,youngest.name);
  return 0;
}

猜你喜欢

转载自blog.csdn.net/fuckingone/article/details/82596941