PAT训练-1028. 人口普查(20)

某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。

这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过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

代码:
两个需要注意的点,由于只需要输出最大最小,不需要排序,否则会超时;另外测试样例4中会有都不符合的输入,只能输出一个0,不能用空格否则会出现格式错误

代码:
“`
#include <iostream>
#include <queue>
#include <iomanip>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
using namespace std;

typedef struct Baby{
string name;
int year;
int month;
int day;
bool operator <(const Baby &temp) const{

if(year != temp.year)

return year < temp.year;

else
{
if(month != temp.month)
return month < temp.month;
else
{
return day < temp.day;
}
}

}

bool operator ==(const Baby &temp) const{

if(year == temp.year && month== temp.month && day==temp.day)

return true;
else
{
return false;
}

}

}baby;
int main(int argc, const char * argv[]) {
int count = 0;
cin>>count;
vector<baby> mypool;
baby yong;
yong.year = 0;
baby old;
old.year = 9999;
for(int i = 0; i < count;i++)
{
string name;
cin >> name;
char age[11]={0,0,0,0,0,0,0,0,0,0,0};
cin>>age;
char temp[5]={0,0,0,0,0};
for(int j= 0; j < 4;j++)
temp[j] = age[j];
int year = atoi(temp);
temp[0]=age[5];
temp[1]=age[6];
temp[2]=0;
int month = atoi(temp);
temp[0]=age[8];
temp[1]=age[9];
temp[2]=0;
int day = atoi(temp);
if(year < 1814 )
continue;
else if(year == 1814)
{
if(month < 9)
continue;
else if(month == 9)
{
if(day < 6)
continue;
}
}

if(year > 2014 )
continue;
else if(year == 2014)
{
if(month > 9)
continue;
else if(month == 9)
{
if(day > 6)
continue;
}
}
baby btemp;
btemp.name = name;
btemp.year = year;
btemp.month = month;
btemp.day = day;
if(btemp < old)
old = btemp;
if(yong < btemp)
yong = btemp;
mypool.push_back(btemp);
}
if(mypool.size() ==0)
cout<<0;
else
cout<< mypool.size()<<” “<<old.name<<” “<<yong.name;
// for(int i = 0;i < mypool.size();i++)
// {
// for(int j = i ; j < mypool.size();j++)
// {
// if(mypool[j] < mypool[i])
// {
// baby temp = mypool[i];
// mypool[i] = mypool[j];
// mypool[j] = temp;
// }
// }
// }
// cout<<mypool.size()<<” “<<mypool[0].name<<” “<<mypool[mypool.size()-1].name;

}
“`

发表评论