P 1028 人口普查

2021-10-19 05:17:24 字數 2308 閱讀 4222

轉跳點:?

1028 人口普查

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

這裡確保每個輸入的日期都是合法的,但不一定是合理的——假設已知鎮上沒有超過 200 歲的老人,而今天是 2014 年 9 月 6 日,所以超過 200 歲的生日和未出生的生日都是不合理的,應該被過濾掉。

輸入在第一行給出正整數 n,取值在(;隨後 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 #include #include //比較喜歡巨集定義,這樣寫**移植性強

#define earliestyear 1814

#define nowyear 2014

#define nowmonth 9

#define nowday 6

typedef struct

personaldata;

//輸入出生日期合法判斷

static int islegal(personaldata *temp);

//查詢最大最小年齡的人

static void find(personaldata *max, personaldata *min, const personaldata *temp);

int main(void)

, theyoungest = ;

scanf("%d", &n);

for (int i = 0; i < n; i++)

find(&theoldest, &theyoungest, &temp);

count++;

}//這裡可以直接加個if特判count == 0的情況,我腦子有坑才這麼寫

printf("%d%s%s%s%s", count, 0 == count ? "" : " ", 0 == count ? "" : theoldest.name, 0 == count ? "" : " ", 0 == count ? "" : theyoungest.name);

return 0;

}static void find(personaldata *max, personaldata *min, const personaldata *temp)

//同理

if ((min->year < temp->year) ||

(min->year == temp->year && min->month < temp->month) ||

(min->year == temp->year && min->month == temp->month && min->day < temp->day))

}static int islegal(personaldata *temp)

//月份超出的

if ((nowyear == temp->year && temp->month > nowmonth) ||

(earliestyear == temp->year && temp->month < nowmonth))

//日期超出的

if ((nowyear == temp->year && nowmonth == temp->month && temp->day > nowday) ||

(earliestyear == temp->year && nowmonth == temp->month && temp->day < nowday))

return 0;

}

貢獻一組測試用例

5john 2051/05/12

tom 1814/01/06

ann 2121/01/30

james 1814/09/05

steve 1671/11/20

結果0  (沒有空格~~~)

pta不易,諸君共勉!

1028 人口普查

某城鎮進行人口普查,得到了全體居民的生日。現請你寫個程式,找出鎮上最年長和最年輕的人。這裡確保每個輸入的日期都是合法的,但不一定是合理的 假設已知鎮上沒有超過200歲的老人,而今天是2014年9月6日,所以超過200歲的生日和未出生的生日都是不合理的,應該被過濾掉。輸入格式 輸入在第一行給出正整數n...

1028 人口普查

某城鎮進行人口普查,得到了全體居民的生日。現請你寫個程式,找出鎮上最年長和最年輕的人。這裡確保每個輸入的日期都是合法的,但不一定是合理的 假設已知鎮上沒有超過200歲的老人,而今天是2014年9月6日,所以超過200歲的生日和未出生的生日都是不合理的,應該被過濾掉。輸入格式 輸入在第一行給出正整數n...

1028 人口普查

某城鎮進行人口普查,得到了全體居民的生日。現請你寫個程式,找出鎮上最年長和最年輕的人。這裡確保每個輸入的日期都是合法的,但不一定是合理的 假設已知鎮上沒有超過200歲的老人,而今天是2014年9月6日,所以超過200歲的生日和未出生的生日都是不合理的,應該被過濾掉。輸入格式 輸入在第一行給出正整數n...