PAT乙級 1028 人口普查 20

2021-07-16 12:59:45 字數 2568 閱讀 8327

題目:

某城鎮進行人口普查,得到了全體居民的生日。現請你寫個程式,找出鎮上最年長和最年輕的人。

這裡確保每個輸入的日期都是合法的,但不一定是合理的——假設已知鎮上沒有超過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...