用一个结构体数组去存数据。让人开心的是他输入的数据全部的一个格式的,也就是说可以直接使用
<>=来比较日期四位大小,是否合法。你或许会想到使用一些函数,比如compare(),但是这里可以直接使用<>=其实他是按照字典序大小来比较的。
//foreverking
#include <vector>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <cmath>
using namespace std;
const int N = 1E5;
struct person
{
/* data */
string name;
string date; //生日
};
string maxname, minname;
string maxbirth = "1814/09/06", minbirth = "2014/09/06";
int cnt;
int main()
{
int n;
cin >> n;
person s[n];
for (int i = 0; i < n; i++)
{
// person l;
// cin >> l.name >> l.date;
// s[i] = l;
//代码
cin >> s[i].name >> s[i].date;
}
for (int i = 0; i < n; i++)
{
/* code */
if (s[i].date >= "1814/09/06" && s[i].date <= "2014/09/06")
{
cnt++;
if (s[i].date >= maxbirth)
{
maxbirth = s[i].date;
maxname = s[i].name;
}
if (s[i].date <= minbirth)
{
minbirth = s[i].date;
minname = s[i].name;
}
}
}
cout << cnt;
if (cnt != 0)
cout << " " << minname << " " << maxname;
cout << endl;
return 0;
}
当然你也可以不用结构体,直接用两个字符串name,date来存数据,每次覆盖掉就行。
#include <iostream>
using namespace std;
int main()
{
int n, cnt = 0;
cin >> n;
string name, date, maxname, minname, maxbirth = "1814/09/06", minbirth = "2014/09/06";
for (int i = 0; i < n; i++)
{
cin >> name >> date;
if (date >= "1814/09/06" && birth <= "2014/09/06")
{
cnt++;
if (date >= maxbirth)
{
maxbirth = date`;
maxname = name;
}
if (date <= minbirth)
{
minbirth = date;
minname = name;
}
}
}
cout << cnt;
if (cnt != 0)
cout << " " << minname << " " << maxname;
return 0;
}
除此之外,你甚至可以用int来存数据,就是过程比较麻烦而已。 题目链接