PAT1028 人口普查 C语言

 题目分析

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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值