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;
}
相关文章
|
7月前
7-33 出生年 (15 分)
7-33 出生年 (15 分)
87 0
|
6月前
1053 住房空置率 (20 分)
1053 住房空置率 (20 分)
|
6月前
1052 卖个萌 (20 分)//部分正确
1052 卖个萌 (20 分)//部分正确
|
7月前
|
数据可视化 Go
快刀斩乱麻,二区7分今年9月发表,孟德尔随机化如何做药靶筛选?
该文章是2023年9月发表在《Journal of Translational Medicine》的孟德尔随机化研究,探索风湿性关节炎(RA)的潜在药物靶点。研究通过遗传学方法鉴定,发现7个可能的药物靶点,这些基因与免疫功能相关,有望为RA药物开发提供新方向,节省成本,并增加临床试验成功的可能性。分析过程包括MR分析、共定位、功能富集和药物预测等步骤。
142 0
|
7月前
7-35 情人节 (15 分)
7-35 情人节 (15 分)
62 0
L2-028 秀恩爱分得快 (25 分)
L2-028 秀恩爱分得快 (25 分)
161 0
L1-035 情人节 (15 分)
L1-035 情人节 (15 分)
139 0
L1-035 情人节 (15 分)
L1-033 出生年 (15 分)
L1-033 出生年 (15 分)
220 0
L1-033 出生年 (15 分)
|
C++
201703-1 分蛋糕
201703-1 分蛋糕
75 0
201703-1 分蛋糕
h0131. 钞票 (15 分)
h0131. 钞票 (15 分)
117 0

热门文章

最新文章