题目分析
1.这符合结构体的数据特征,一个成员内包含属于它的多个信息
2.其中有不合理的数据要剔除。这是难点也是重点:首先没办法在输入的时候去除,所以我在挑选年长和年轻的人之前,先用一段代码把符合标准的居民成员的编号存入一个数组中,再比较
#include<stdio.h>
struct residents
{
char name[6];
int y;
int m;
int d;
};
int main()
{
int n;
scanf("%d",&n);
struct residents r[n];
int i=0;
for(i=0;i<n;i++)
{
scanf("%s %d",&r[i].name,&r[i].y);
getchar();scanf("%d",&r[i].m);
getchar();scanf("%d",&r[i].d);
}
int max=0,min=0,a[n],k=0;
for(i=0;i<n;i++)
{
if(r[i].y>1814&&r[i].y<2014)
max=min=i;
if(r[i].y>1814&&r[i].y<2014) a[k++]=i;
else if(r[i].y==1814&&r[i].m>9) a[k++]=i;
else if(r[i].y==2014&&r[i].m<9) a[k++]=i;
else if(r[i].y==1814&&r[i].m==9&&r[i].d>=6) a[k++]=i;
else if(r[i].y==2014&&r[i].m==9&&r[i].d<=6) a[k++]=i;
}//找符合要求居民的成员编号储存在a[]中
if(k==0) printf("%d",k);
else{
for(i=0;i<k;i++)
{
if(r[max].y>=r[a[i]].y)//找最年长的人
{
if(r[max].y>r[a[i]].y) max=a[i];
if(r[max].m>=r[a[i]].m)
{
if(r[max].m>r[a[i]].m) max=a[i];
if(r[max].d>r[a[i]].d)
max=a[i];
}
}
if(r[min].y<=r[a[i]].y)//找最年长的人
{
if((r[min].y<r[a[i]].y)) min=a[i];
if(r[min].m<=r[a[i]].m)
{
if(r[min].m<r[a[i]].m) min=a[i];
if(r[min].d<r[a[i]].d)
min=a[i];
}
}
}
printf("%d %s %s",k,r[max].name,r[min].name);
}
}