思路
一个个对比得出年龄大小
容易错的几个点:
测试点0:如果开局无min,max都指向定义结构体的第一个并比较,那么如果第一个数据不是合法数据,则min和max一直没变过,所以这里采用多一个循环来取到第一个合法数据,并将min和max都取值为该数据下标
测试点3:如果一个合法数据都没有,只需要输出0,且最后结尾不能有空格
代码
#include<string>
using namespace std;
typedef struct people{
char name[6];
int year;
int month;
int day;
}demo;
int main(){
int n,min,max;
cin>>n;
int cnt=n;
demo aaa[100000];
for(int i=0;i<n;i++){
scanf("%s %d/%d/%d",&aaa[i].name,&aaa[i].year,&aaa[i].month,&aaa[i].day);
}
for(int i=0;i<n;i++){
if((aaa[i].year>1814&&aaa[i].year<2014)||(aaa[i].year==1814&&aaa[i].month>9)||(aaa[i].year==1814&&aaa[i].month==9&&aaa[i].day>=6)||(aaa[i].year==2014&&aaa[i].month<9)||aaa[i].year==2014&&aaa[i].month==9&&aaa[i].day<=6){
min=i;
max=i;
break;
}
}
for(int i=0;i<n;i++){
if(aaa[i].year<1814||(aaa[i].year==1814&&aaa[i].month<9)||(aaa[i].year==1814&&aaa[i].month==9&&aaa[i].day<6)){
cnt--;
}else if(aaa[i].year>2014||(aaa[i].year==2014&&aaa[i].month>9)||(aaa[i].year==2014&&aaa[i].month==9&&aaa[i].day>6)){
cnt--;
}else{
if(aaa[i].year<aaa[max].year||(aaa[i].year==aaa[max].year&&aaa[i].month<aaa[max].month)||(aaa[i].year==aaa[max].year&&aaa[i].month==aaa[max].month&&aaa[i].day<aaa[max].day)){
max=i;
}
if(aaa[i].year>aaa[min].year||(aaa[i].year==aaa[min].year&&aaa[i].month>aaa[min].month)||(aaa[i].year==aaa[min].year&&aaa[i].month==aaa[min].month&&aaa[i].day>aaa[min].day)){
min=i;
}
}
}
if(cnt==0)
cout<<0;
else
printf("%d %s %s",cnt,aaa[max].name,aaa[min].name);
}
方法是比较笨的,但是非常直观,对小白比较友好