PAT (Basic Level) Practice (中文)- 1028 人口普查(20 分)

题目链接:点击打开链接

题目大意:略。

解题思路:

1、题目很单纯认为一年(一岁)就是yyyy相差1即可。无需考虑闰年/平年。
2、日期比较 y*10000 + m*100 + d 小技巧。
3、注意:合理数为 0 的情况,由于名字输出空,所以报的是 PE,而不是 WA。

AC 代码

#include<bits/stdc++.h>
#include<cmath>

#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f

using namespace std;

typedef long long ll;

int main()
{
    const int MAX=20140906,MIN=18140906;
    int n,mi=INF,ma=-1,y,m,d,rs,cnt=0; scanf("%d",&n);
    string s1,s2;
    char s[10];
    for(int i=0;i<n;i++)
    {
        scanf("%s%d/%d/%d",s,&y,&m,&d);
        rs=y*10000+m*100+d;

        if(!(rs>MAX || rs<MIN))
        {
            cnt++;
            if(rs>ma) ma=rs,s1=s;
            if(rs<mi) mi=rs,s2=s;
        }
    }

    if(cnt==0) puts("0");
    else printf("%d %s %s\n",cnt,s2.c_str(),s1.c_str());

    return 0;
}

猜你喜欢

转载自blog.csdn.net/Dream_Weave/article/details/81317651