1028 人口普查 (20 分)

xiaoxiao2021-02-28  44

解题思路 首先把合理的人员加入结构体中,在加入的时候顺便统计一下有多少个人,然后对结构体中合格的人员按照出生日期进行排序,得到最年长的在第一位,最年轻的在最后一位,直接输出就行了。是否是合理的人员通过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; }
转载请注明原文地址: https://www.6miu.com/read-2619826.html

最新回复(0)