需要注意扣分点 只输出有效日期的信息 无效的不参与比较 。
如果一个有效的都没有 直接输出 0
测试点3 就是 有效身份日期为0 的情况
代码:
#include <iostream>
#include<cstring>
#include<algorithm>
using namespace std;
string str[100005];
int year[100005],month[100005],day[100005];
int num[100005]={0};
int main()
{
int N;
cin>>N;
for (int i=0;i<N ;i++ )
{
cin>>str[i];
scanf("%d/%d/%d",&year[i],&month[i],&day[i]);
}
int count=0;
for (int i=0;i<N ;i++ )
{
num[i]=year[i]*10000+month[i]*100+day[i];
}
for (int i=0;i<N ;i++ )
{
if (num[i]>=18140906 && num[i]<=20140906)
{
count++;
}
}
int max=0,i2=0;
while(i2<N){
if (num[i2]>=18140906&&num[i2]<=20140906)
{
max=num[i2]; // 将 max 赋值 一个有效日期 方便后面 找到最大值 ,因为无效的生日不参与比较
break; // 下面 min 同理
}
else {
i2++;
}
}
int min=0,i1=0;
while(i1<N){
if (num[i1]>=18140906&&num[i1]<=20140906)
{
min=num[i1];
break;
}
else {
i1++;
}
}
int str1=0,str2=0;
for (int i=0;i<N;i++ )
{
if (num[i]>=max && num[i]>=18140906&&num[i]<=20140906)
{
max=num[i];
str1=i;
}
}
for (int i=0;i<N ;i++ )
{
if (num[i]<=min && num[i]>=18140906 && num[i]<=20140906)
{
min=num[i];
str2=i;
}
}
if (count==0)
{
cout<<count<<endl;
}
else
{
cout<<count<<" "<<str[str2]<<" "<<str[str1];
}
return 0;
}