题目
思路
可以将输入的生日存储为字符串进行处理,方便直接进行大小比较。初始化最年长生日为'18000000',最年轻生日为'20150000'
(1)对输入的生日进行格式处理,注意这里不能只取不为'/'的字符,而是要取0-9范围之内的字符,防止存入'*','@'之类的其他非数值字符。
(2)例如,'2001/01/01'处理后得到'20010101',可以直接将其与生日范围的上下界'20140906'与'18140906'对比,如果越界则跳转至下一个输入,否则有效生日数+1。
(3)每处理完得到一个生日数字的字符串,将其与当前最大与最小生日进行比较,若更大或更小则进行替换,并保存姓名。
(4)处理完所有生日后,输出有效生日数、最年长、最年轻的人的名字。
代码
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(){
int n;
cin>>n;
string young="18000000",old="20150000";
string oname,yname;
int cnt=0;
for(int i=0; i<n; i++){
string name,s,a;
cin>>name>>s;
for(int j=0; j<s.size(); j++){
if(s[j]>='0'&&s[j]<='9')
a+=s[j];
}
if(a>"20140906"||a<"18140906") continue;
cnt++;
if(a>young){
young=a;
yname=name;
}
if(a<old){
old=a;
oname=name;
}
}
cout<<cnt;
if(cnt) cout<<" "<<oname<<" "<<yname<<endl;
return 0;
}