1028. ⼈⼝普查

1028. ⼈⼝普查

某城镇进⾏⼈⼝普查,得到了全体居⺠的⽣⽇。现请你写个程序,找出镇上最年⻓和最年轻的⼈。这 ⾥确保每个输⼊的⽇期都是合法的,但不⼀定是合理的——假设已知镇上没有超过200岁的⽼⼈,⽽今 天是2014年9⽉6⽇,所以超过200岁的⽣⽇和未出⽣的⽣⽇都是不合理的,应该被过滤掉。

输⼊格式:

输⼊在第⼀⾏给出正整数N,取值在(0, 10^5];随后N⾏,每⾏给出1个⼈的姓名(由不超过5个英⽂字 ⺟组成的字符串)、以及按“yyyy/mm/dd”(即年/⽉/⽇)格式给出的⽣⽇。题⽬保证最年⻓和最年轻 的⼈没有并列。

输出格式:

在⼀⾏中顺序输出有效⽣⽇的个数、最年⻓⼈和最年轻⼈的姓名,其间以空格分隔。

输⼊样例:

5

John 2001/05/12

Tom 1814/09/06

Ann 2121/01/30

James 1814/09/05

Steve 1967/11/20

输出样例:

3 Tom John

分析:

生日应该在"1814/09/06"到"2014/09/06"之间,如果符合要求,cnt++,用minname和maxname来存放答案。如果birth>=maxbrith,就更新maxname和maxbirth,min同理。

最后,如果cnt不等于0,就输出他们的姓名

#include <bits/stdc++.h>
using namespace std;
int main(){
	int n;cin>>n;
	int cnt=0;
	string name,birth,maxname,minname;
	string maxbirth="1814/09/06",minbirth="2014/09/06";
	for(int i=0;i<n;i++){
		cin>>name>>birth;
		if(birth>="1814/09/06"&&birth<="2014/09/06"){
			cnt++;
			if(birth>=maxbirth){
				maxbirth=birth;
				maxname=name;
			}
			if(birth<=minbirth){
				minbirth=birth;
				minname=name;
			}
		}
	} 
	cout<<cnt;
	if(cnt!=0) cout<<" "<<minname<<" "<<maxname;
	return 0;
} 
上一篇:springSectury的应用


下一篇:MySQL之存储引擎及SQL优化