PAT 1028. 人口普查
阿新 • • 發佈:2017-12-23
ace 輸入格式 2014年 als birt stream spa 返回 年輕
人口普查
某城鎮進行人口普查,得到了全體居民的生日。現請你寫個程序,找出鎮上最年長和最年輕的人。
這裏確保每個輸入的日期都是合法的,但不一定是合理的——假設已知鎮上沒有超過200歲的老人,而今天是2014年9月6日,所以超過200歲的生日和未出生的生日都是不合理的,應該被過濾掉。
輸入格式:
輸入在第一行給出正整數N,取值在(0, 105];隨後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
分析
雖然這道題不難,但是如果想代碼簡潔,時間短的話,還是要想一想的,我的代碼是看了別人的,因為他的代碼太簡潔了,速度又快,於是自己重新寫了一遍,順便復習了字符串。
代碼如下
#include<iostream> #include<string.h> using namespace std; bool compare(const char s1[10],const char s2[10]){//返回true,則s1不比s2晚 for(int i=0;i<10;i++){ if(s1[i]<s2[i]) return true; if(s1[i]>s2[i]) return false; } return true; } int main(){ int n,cnt=0; cin>>n; char name[6],birthday[11],old[6],young[6],oldest[11]="2014/09/06",youngest[11]="1814/09/06"; while(n--){ scanf("%s %s",name,birthday); if(compare("1814/09/06",birthday)&&compare(birthday,"2014/09/06")){ cnt++; if(compare(birthday,oldest)){ strcpy(old,name); strcpy(oldest,birthday); } if(compare(youngest,birthday)){ strcpy(young,name); strcpy(youngest,birthday); } } } if(cnt>0) //cout<<cnt<<" "<<old<<" "<<young<<endl; printf("%d %s %s\n",cnt,old,young); else //cout<<0<<endl; printf("0\n"); return 0; }
PAT 1028. 人口普查