1028 人口普查 (20 分)

简介: 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

 

 

在提交时发生了一件神奇的事情,有时候提交部分正确,有时提交完全正确。//测试用例应该是会变的。

 

#include<iostream>
#include<string>
using namespace std;
class birth {
public:
  int year;
  int month;
  int day;
  bool isbirth() {
    return ((year < 2014 || (year == 2014 && month < 9) || (year == 2014 && month == 9 && day <= 6)) &&
      (year > 1814 || (year == 1814 && month > 9) || (year == 1814 && month == 9 && day >= 6)));
  }
  bool operator>(birth b2) {
    return  (year > b2.year || (year == b2.year && month > b2.month) || (year == b2.year && month == b2.month && day > b2.day));
  }
};
class person {
public:
  birth birthday;
  string name;
};
int main()
{
  int N;
  person young;
  young.birthday.year = 2020;
  person old;
  int count=0;
  cin >> N;
  person tmp;
  for (int i = 0; i < N; i++) {
    cin >> tmp.name;
    scanf("%d/%d/%d", &tmp.birthday.year, &tmp.birthday.month, &tmp.birthday.day);
    if (tmp.birthday.isbirth()) {
      count++;
      if (tmp.birthday > old.birthday)
        old = tmp;
      if (young.birthday > tmp.birthday ) 
        young= tmp;
    }
  }
  cout << count;
  if (count != 0) {
    cout << " " << young.name << " " << old.name;
  }
  return 0;
}

想了一下,做了一点修改,当把第一个合法的人给young 和old,(因为这时只有一个人,他同时是最年轻和最老的)

#include<iostream>
#include<string>
using namespace std;
class birth {
public:
  int year;
  int month;
  int day;
  bool isbirth() {
    return ((year < 2014 || (year == 2014 && month < 9) || (year == 2014 && month == 9 && day <= 6)) &&
      (year > 1814 || (year == 1814 && month > 9) || (year == 1814 && month == 9 && day >= 6)));
  }
  bool operator>(birth b2) {
    return  (year > b2.year || (year == b2.year && month > b2.month) || (year == b2.year && month == b2.month && day > b2.day));
  }
};
class person {
public:
  birth birthday;
  string name;
};
int main()
{
  int N;
  person young;
  person old;
  int count=0;
  cin >> N;
  person tmp;
  for (int i = 0; i < N; i++) {
    cin >> tmp.name;
    scanf("%d/%d/%d", &tmp.birthday.year, &tmp.birthday.month, &tmp.birthday.day);
    if (tmp.birthday.isbirth()) {
      if (count == 0) {  
        old = tmp;
        young = tmp;
      }
      count++;
      if (tmp.birthday > old.birthday)
        old = tmp;
      if (young.birthday > tmp.birthday ) 
        young= tmp;
    }
  }
  cout << count;
  if (count != 0) {
    cout << " " << young.name << " " << old.name;
  }
  return 0;
}
相关文章
|
5月前
1053 住房空置率 (20 分)
1053 住房空置率 (20 分)
|
5月前
1077 互评成绩计算 (20 分)
1077 互评成绩计算 (20 分)
|
5月前
1073 多选题常见计分法 (20 分)
1073 多选题常见计分法 (20 分)
|
5月前
1052 卖个萌 (20 分)//部分正确
1052 卖个萌 (20 分)//部分正确
|
算法 Python
2022-10-26-线性回归分析GDP与公交车数量的关系
2022-10-26-线性回归分析GDP与公交车数量的关系
159 0
|
安全
L3-009 长城 (30 分)(数学知识)
L3-009 长城 (30 分)(数学知识)
225 0
L3-009 长城 (30 分)(数学知识)
|
测试技术
PAT乙级1004.成绩排名(20分)
PAT乙级1004.成绩排名(20分)
94 0
|
Shell
一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选
一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选
510 0
|
算法 测试技术
h0103. 末日算法 (10 分)
h0103. 末日算法 (10 分)
232 0
L1-024 后天 (5 分)
L1-024 后天 (5 分)
153 0