1028 人口普查 (20 分)

解题思路
首先把合理的人员加入结构体中,在加入的时候顺便统计一下有多少个人,然后对结构体中合格的人员按照出生日期进行排序,得到最年长的在第一位,最年轻的在最后一位,直接输出就行了。是否是合理的人员通过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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值