分析:
- 过滤不合理的数据:超出200岁和未出生
- 找出最年长和最年轻的人
思路:
- 用string name[i]存储姓名,string birth[i]存储出生日期
- 过滤出生日期大于2014/09/06,小于1814/09/06的数据
- 统计有效人数,直接比较出生日期
代码如下
#include <iostream>
#include <string>
using namespace std;
int main() {
int N; cin >> N;
string name[N], birth[N];
string max = "2001/05/12", min = "2001/05/12";
int ma = 0, mi = 0;
int total = 0, i = 0;
for(int i = 0; i < N; i++) {
cin >> name[i] >> birth[i];
if(birth[i] > "2014/09/06" || birth[i] < "1814/09/06")
continue;
total++;
if(birth[i] >= max) { //更新最年长数据
max = birth[i]; ma = i;
}
if(birth[i] <= min) { //更新最年轻数据
min = birth[i]; mi = i;
}
}
if(0 == total) { cout << total;}
else
cout << total << ' ' << name[mi] << ' ' << name[ma];
}
反馈:
- 一开始还在考虑怎样在输入的时候将年月日提取出来,后来想到直接比较string就行了,string真是强大啊
注意点:
- WA了一次,测试点3未通过
先猜测是边界数据没考虑周全,验证后无问题
上网查询发现是有效人数为0的情况,该情况下不输出人名(因为没有)