PAT-B 1028 人口普查【時間】

Enjoy_process發表於2019-02-22

                                                PAT-B 1028 人口普查

                 https://pintia.cn/problem-sets/994805260223102976/problems/994805293282607104

 

 

題目

某城鎮進行人口普查,得到了全體居民的生日。現請你寫個程式,找出鎮上最年長和最年輕的人。這裡確保每個輸入的日期都是合法的,但不一定是合理的——假設已知鎮上沒有超過 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

分析

簡單題,但是要注意,當有效生日的個數等於0時,只需輸出0即可。

C++程式

#include<iostream>
#include<cstring>

using namespace std;

struct People{
	char name[10];
	int time;
}old,young;

int main()
{
	int n,ans=0,y,m,d;
	char name[10];
	scanf("%d",&n);
	bool flag=false; 
	for(int i=1;i<=n;i++)
	{
		scanf("%s %d/%d/%d",name,&y,&m,&d);
		int time=y*10000+m*100+d;
		if(time<18140906||time>20140906) continue;//不合法
		//更新年老的人的資訊 
		if(!flag||time<old.time)
		{
			strcpy(old.name,name);
			old.time=time;
		}
		//更新年輕的人的資訊 
		if(!flag||time>young.time)
		{
			strcpy(young.name,name);
			young.time=time;	
		} 
		flag=true;//標記old、young中已有合法資訊 
		ans++;//合法的人的數量加一 
	}
	if(ans==0)
	  printf("0\n");
	else
	  printf("%d %s %s\n",ans,old.name,young.name);
	return 0;
}

 

相關文章