PAT乙级 1028 人口普查

记录下解题思路,题型,代码,遇到的问题及解决办法
题目:PAT乙级 1028 人口普查_第1张图片

输入样例:

5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20

输出样例:

3 Tom John

这道题的关键是不要将出生日期当作整型来处理,应当作字符串处理。如果当作整型,就需要存取三个变量,并且需要写很多判断语句,有点繁琐,而字符串也能比较大小,本题给出的出生日期格式’xxxx/xx/xx’,通过字符串比较规则正好能比较日期早晚(大小)。可惜俺就傻傻的用整型来比较了つ﹏⊂,很麻烦。就不放我的代码了,柳婼小姐姐代码如下(C++):

#include 
using namespace std;
int main() {
    int n, cnt = 0;  // 总人数,有效身份记录
    cin >> n;  // max/min birth 记录最大/最小出生日期  max/min name 对应最大/最小出生日期的人名
    string name, birth, maxname, minname, maxbirth = "1814/09/06", minbirth = "2014/09/06";  
    for (int i = 0; i < n; i++) {
        cin >> name >> birth;
        if (birth >= "1814/09/06" && birth <= "2014/09/06") {
            cnt++;  // 判断若为身份有效,则记录+1
            if (birth >= maxbirth) {  // 出生日期比初始值晚就更新初始值
                maxbirth = birth;
                maxname = name;
            }
            if (birth <= minbirth) {  // 出生日期比初始值早就更新初始值
                minbirth = birth;
                minname = name;
            }
        }
    }
    cout << cnt;  // 若有效日期人数为零则只输出0
    if (cnt != 0) cout << " " << minname << " " << maxname;
    return 0;
}

你可能感兴趣的:(PAT乙级)