PAT乙级考试-1028 人口普查

题目
在这里插入图片描述
在这里插入图片描述
思路

  1. 录入数据
    (1)使用一个结构people来保存每个人的信息,成员包括名字和出生日期
    (2)初始创建一个max和一个min,表示年级最大的人和年级最小的人,其中max的初始birth应该比任何有效数据的birth都大,min的初始birth应该比任何有效数据的birth都小,使得任何有效数据都可以覆盖初始值
    (3)名字直接录入name[]数组,出生日期先以字符串的形式录入temp[]数组,再用trans函数转换为数字再赋值给birth
    (4)每录入一个有效数据,计数的count++,且和max,min的birth比较做对应的处理
  2. 打印
    最后直接打印出count和max以及min的name即可,但需要注意,有可能出现没有一个有效数据的情况,所以需要先校验一下count的个数,当count>0时打印对应的名字;
#include<stdio.h>

typedef struct
{
	char name[6];
	int birth;
}people;

int trans(char temp[])
{
	int res = 0;
	for (int i = 0; temp[i] != '\0'; i++)
		if (temp[i] != '/')
			res=res*10+(temp[i]-'0');
	return res;
}
int main(void)
{
	int n, count = 0;
	people min = { "max",0 }, max = { "min",21000000 }, p;
	char temp[11];

	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%s%s", p.name, temp);
		p.birth = trans(temp);
		if (p.birth >= 18140906 && p.birth <= 20140906)
		{
			count++;
			if (p.birth < max.birth)
				max = p;
			if (p.birth > min.birth)
				min = p;
		}
	}
	printf("%d",count);
	if (count > 0)
	{
		printf(" %s", max.name);
		printf(" %s", min.name);
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值