PAT 1028 人口普查

题目

思路

可以将输入的生日存储为字符串进行处理,方便直接进行大小比较。初始化最年长生日为'18000000',最年轻生日为'20150000'

(1)对输入的生日进行格式处理,注意这里不能只取不为'/'的字符,而是要取0-9范围之内的字符,防止存入'*','@'之类的其他非数值字符。

(2)例如,'2001/01/01'处理后得到'20010101',可以直接将其与生日范围的上下界'20140906'与'18140906'对比,如果越界则跳转至下一个输入,否则有效生日数+1。

(3)每处理完得到一个生日数字的字符串,将其与当前最大与最小生日进行比较,若更大或更小则进行替换,并保存姓名。

(4)处理完所有生日后,输出有效生日数、最年长、最年轻的人的名字。

代码

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(){
	int n;
	cin>>n;
	string young="18000000",old="20150000";
	string oname,yname;
	int cnt=0;
	for(int i=0; i<n; i++){
		string name,s,a;
		cin>>name>>s;
		for(int j=0; j<s.size(); j++){
			if(s[j]>='0'&&s[j]<='9') 
                a+=s[j];
		}
		if(a>"20140906"||a<"18140906") continue;
		cnt++;
		if(a>young){
			young=a;
			yname=name;
		}
		if(a<old){
			old=a;
			oname=name;
		}
	}
    cout<<cnt;
	if(cnt) cout<<" "<<oname<<" "<<yname<<endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值