題目:某城鎮進行人口普查,得到了全體居民的生日。現請你寫個程式,找出鎮上最年長和最年輕的人。
這裡確保每個輸入的日期都是合法的,但不一定是合理的——假設已知鎮上沒有超過200歲的老人,而今天是2023年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
pat鏈結
1.結構體儲存資訊:
struct person
;
2.不斷更新最年長的人和最年輕的人。初始可以將第乙個有效的資訊作為初始,也可以最年長初始為2023年9月6日,最年輕 為2023年9月6日
3.為增強程式可讀性,可考慮me(person a, person b)和le(person a,person b)函式
version1.0
/**
* @tag pat_b_1028
* @date 2016-08-10 22:22:16-23:08
* @version 1.0
* @language c++
* @ranking 235/2964
*/#include
#include
#include
struct person
;int main()
//找到年齡更小的
if (st
.yy > min.yy || ((st
.yy == min.yy) && ((st
.mm>min.mm) || ((st
.mm == min.mm) && (st
.dd > min.dd)))))
//找到年齡更大的
if (st
.yy< max.yy || ((st
.yy == max.yy) && ((st
.mm.mm) || ((st
.mm == max.mm) && (st
.dd< max.dd)))))
}//注意處理沒有合理年齡的情況
if (cnt > 0)
else
printf("%d", cnt);
return 0
;}
version2.0/**
* @tag pat_b_1028
* @date 2016-08-10 22:22:16-23:08
* @version 2.0
* @language c++
* @ranking 235/2964
*/#include
#include
#include
//結構體儲存資料
struct person
oldest, youngest, left, right, st
;//比較a是否lessorequal b
bool le(person a, person b)
//比較a是否moreorequal b
bool me(person a, person b)
//初始化
void init()
int main()
}if (cnt > 0) printf("%d %s %s", cnt, oldest.name, youngest.name);
else printf("%d", cnt);
return 0
;}
1.考慮所有人年齡都不合理的情況,要單獨討論:
if (cnt > 0) printf("%d
%s%s", cnt, oldest.name, youngest.name);
else
printf("%d", cnt);
2.在使用 新讀入的日期來更新最大日期和最小日期時,有可能同時更新最大日期和最小日期,因此不能使用if……else的寫法來選擇其中乙個更新
3.日期的比較注意要分三種情況討論:
//比較a是否lessorequal b
bool le(person a, person b)
PAT 乙級 1028 人口普查 20
某城鎮進行人口普查,得到了全體居民的生日。現請你寫個程式,找出鎮上最年長和最年輕的人。這裡確保每個輸入的日期都是合法的,但不一定是合理的 假設已知鎮上沒有超過200歲的老人,而今天是2014年9月6日,所以超過200歲的生日和未出生的生日都是不合理的,應該被過濾掉。輸入格式 輸入在第一行給出正整數n...
PAT 乙級 1028 人口普查 20
某城鎮進行人口普查,得到了全體居民的生日。現請你寫個程式,找出鎮上最年長和最年輕的人。這裡確保每個輸入的日期都是合法的,但不一定是合理的 假設已知鎮上沒有超過200歲的老人,而今天是2014年9月6日,所以超過200歲的生日和未出生的生日都是不合理的,應該被過濾掉。輸入格式 輸入在第一行給出正整數n...
PAT乙級 1028 人口普查 20
某城鎮進行人口普查,得到了全體居民的生日。現請你寫個程式,找出鎮上最年長和最年輕的人。這裡確保每個輸入的日期都是合法的,但不一定是合理的 假設已知鎮上沒有超過200歲的老人,而今天是2014年9月6日,所以超過200歲的生日和未出生的生日都是不合理的,應該被過濾掉。輸入格式 輸入在第一行給出正整數n...