PTA刷题Basic篇——1028.人口普查——Day(14)

题目描述

在这里插入图片描述
找出所有合理年龄中最年长的和最年幼的人,输出他们的姓名以及年龄合理的人数。

题目分析

这个问题显然要使用结构体,我们创建一个people的结构体来存储人的信息,包括出生日期以及姓名。这里我们把整个出生日期归为一个属性,即date,它是string类型的。顺便在定义结构体的时候创建三个结构体变量,包括我们将要输入的成员a,最年轻的young和最年老的old。
我们使用一种很巧妙的方法,那就是把2014/09/06和1814/09/06作为两个限定条件。一个作为上限,一个作为下限。
当我们输入两个string时(姓名和出生日期),如果出生日期在这个范围内,我们就做处理,不在这个范围内,直接跳过。(字符串是可以比较的)
如果我们输入的字符串是在这个范围内的话,我们就做判断,输入一个做一次判断,选出出生日期字符串值最大的,更新young,最小的更新old。(岁数越大,出生日期越小)由于a,young,old都是结构体变量,所以可以直接通过赋值更新。每输入一个合理的年龄,我们再对其进行计数。
这种方法不需要排序,只需要在每次输入的时候与当前的young和old比较,来更新二者即可。

代码

#include <iostream>
#include <string>
using namespace std;
struct pep//利用结构来存储3个相似的变量
{
  string name,date;
}a,young,old;
int main()
{
    int n,num=0;
    string up="2014/09/06",down="1814/09/06";//利用string的性质来直接比较大小
    young.date=down;
    old.date=up;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a.name>>a.date;
        if(a.date>=down&&a.date<=up)
        {
            num++;
            //数字越大越年轻
            if(a.date>young.date)
                young=a;
            //数字越小越老
            if(a.date<old.date)
                old=a;
        }
    }
    if(num)
    {
        cout<<num<<" "<<old.name<<" "<<young.name;
    }
    else
    {
        cout<<0;
    }
    return 0;
}

答题用时15min
Q28——finish√

发布了60 篇原创文章 · 获赞 2 · 访问量 1035

猜你喜欢

转载自blog.csdn.net/weixin_44755413/article/details/105655163