PTA乙级1028 人口普查 (20 分)及测试点0和3分析

思路

	一个个对比得出年龄大小
	容易错的几个点:
	测试点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);
}

在这里插入图片描述
方法是比较笨的,但是非常直观,对小白比较友好

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值