1018 人口普查(C++)

题目

题目描述
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年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


解题思路

1. 题目的要求是输入的一些生日如果不合法的,要过滤到,同时在未被过滤的日期里挑出最小的日期和最大的日期
2. 日期的比较可以用字符串进行比较
3. 利用printf()对字符串进行输出,需要注意不可直接输出字符串,因为printf()定义的是char*类型,不过也可以直接cout输出

//部分代码
//zhicheng
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        string start="1814/09/06",end="2014/09/06";//合法日期的范围
        string maxn,minn,max_bir="1814/09/05",min_bir="2014/09/07";
        string name,bir;//要输入的变量
        int count=0;//记录合法日期的数量
        while(n--)
        {
            cin>>name>>bir;
            if(bir>=start&&bir<=end)
            {
                count++;
                if(bir>max_bir){max_bir=bir;minn=name;}
                if(bir<min_bir){min_bir=bir;maxn=name;}
            }
        }
        printf("%d %s %s\n",count,maxn.c_str(),minn.c_str());
    }
    return 0;
}

这里写图片描述

铺子日常更新,如有错误请指正
传送门:代码链接 题目链接 PAT-B题解

猜你喜欢

转载自blog.csdn.net/s_zhicheng27/article/details/80996810