题目描述
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过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>
using
namespace
std;
int
main()
{
ios::sync_with_stdio(
false
);
int
N; cin >> N;
string name, str;
string minStr=
"z"
, minName=
""
;
string maxStr=
""
, maxName=
""
;
string start =
"1814/09/06"
;
string end =
"2014/09/06"
;
int
counts = 0;
for
(
int
i=0; i<N; i++) {
cin >> name >> str;
if
(str>=start && str<=end) {
counts++;
if
(minStr > str) {
minStr = str;
minName = name;
}
if
(maxStr < str) {
maxStr = str;
maxName = name;
}
}
}
cout << counts <<
" "
<< minName <<
" "
<< maxName << endl;
return
0;
}
代码:
#include"iostream"
#include "string"
#include <iomanip>
#include "stdio.h"
using namespace std;
struct People
{
string name;
int Year;
int Month;
int Day;
};
People TransFormInput()
{
People Temp;
cin >> Temp.name;
string Birthday;
cin >> Birthday;
Temp.Year = 1000 * (Birthday[0] - 0x30) + 100 * (Birthday[1] - 0x30) + 10 * (Birthday[2] - 0x30) + (Birthday[3] - 0x30);
Temp.Month = 10 * (Birthday[5] - 0x30) + (Birthday[6] - 0x30);
Temp.Day = 10 * (Birthday[8] - 0x30) + (Birthday[9] - 0x30);
return Temp;
}
int main()
{
int N, validNum = 0;
cin >> N;
People SeniorPeople, YouthPeople;
People TempPeople;
for (int i = 0; i < N; i++)
{
TempPeople = TransFormInput();
if (TempPeople.Year > 2014)
continue;
else if (TempPeople.Year < 1814)
continue;
else if (TempPeople.Year == 2014)
{
if (TempPeople.Month > 9)
continue;
else if (TempPeople.Month == 9 && TempPeople.Day > 6)
continue;
}
else if (TempPeople.Year == 1814)
{
if (TempPeople.Month < 9)
continue;
else if (TempPeople.Month == 9 && TempPeople.Day < 6)
continue;
}
if (validNum == 0)
{
SeniorPeople = TempPeople;
YouthPeople = TempPeople;
}
validNum++;
//find little
if (TempPeople.Year > YouthPeople.Year)
YouthPeople = TempPeople;
else if (TempPeople.Year == YouthPeople.Year)
{
if (TempPeople.Month > YouthPeople.Year)
YouthPeople = TempPeople;
else if (TempPeople.Month == YouthPeople.Month && TempPeople.Day > YouthPeople.Day)
YouthPeople = TempPeople;
}
if (TempPeople.Year < SeniorPeople.Year)
{
SeniorPeople = TempPeople;
}
else if (TempPeople.Year == SeniorPeople.Year)
{
if (TempPeople.Month < SeniorPeople.Year)
SeniorPeople = TempPeople;
else if (TempPeople.Month == SeniorPeople.Month && TempPeople.Day < SeniorPeople.Day)
SeniorPeople = TempPeople;
}
//cin >> TempPeople.name >> TempPeople.Day >> ;
}
cout << validNum << ' ' << SeniorPeople.name << ' ' << YouthPeople.name;
}
重点:
输入的时间格式,细节细节!
各个continue的用处。