PAT 乙级 1028 人口普查(解题思路+AC代码)

news/2024/11/29 12:42:05/

题目:

某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。

这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。

输入格式:

输入在第一行给出正整数 N,取值在(0,105];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。

输出格式:

在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。

输入样例:

5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20

输出样例:

3 Tom John

代码长度限制 16 KB
时间限制 200 ms
内存限制 64 MB

 

解题思路

首先自定义一个Person类,其成员变量包括姓名,年,月,日。并且重载了=运算符和>运算符,使Person类具有赋值和比较的能力。

主函数的大致思路:

  1. 实例化可能(合理)的最大年龄(1814/09/06)和最小年龄(2014/09/06)的Person对象,定义动态变化的最大年龄和最小年龄Person对象。
  2. 初始化动态变化的最大年龄对象为2014/09/06,初始化动态变化的最小年龄对象为1814/09/06,这样能够使这个动态变化的最大和最小年龄对象赋值为真实存在的对象。
  3. 使用for循环,每一轮检测一个case,如果这个case的年龄合理,那么有效生日的个数加1,并且更新动态变化的最大和最小年龄对象。

注意: 这里容易忽略一种情况,那就是有效生日的个数可能为0,这种情况就不用输出最大和最小年龄的姓名。

 

AC代码

#include<bits/stdc++.h>
using namespace std;class Person{
public:Person();~Person(){};Person(string name,int y,int m,int d):_name(name),_year(y),_month(m),_day(d){}Person& operator=(const Person& per){_name=per._name;_year=per._year;_month=per._month;_day=per._day;return *this;}bool operator>(Person& per){if(this->_year!=per._year) return this->_year<=per._year;else if(this->_month!=per._month) return this->_month<=per._month;else return this->_day<=per._day;}string _name;int _year,_month,_day;
};int main()
{int num=0;Person per1("qwe_per1",1814,9,6);Person per2("qwe_per2",2014,9,6);Person per_old=per2,per_young=per1;int N;cin>>N;for(int i=0;i<N;i++){string name;int year,month,day;cin>>name;scanf("%d/%d/%d",&year,&month,&day);Person per_temp(name,year,month,day);if(per1>per_temp&&per_temp>per2){num++;if(per_young>per_temp)per_young=per_temp;if(per_temp>per_old)per_old=per_temp;}}cout<<num;if (num != 0){cout<<" "<<per_old._name<<" "<<per_young._name;}return 0;
}

http://www.ppmy.cn/news/66838.html

相关文章

2023年湖北武汉安全员ABC报名条件和报名资料是什么?全国通用?

2023年湖北武汉安全员ABC报名条件和报名资料是什么&#xff1f;全国通用&#xff1f; 一、湖北安全员ABC报名条件要求&#xff1a; 1.安全员A证针对的是企业主要负责人&#xff0c;包括法定代表人、总经理&#xff08;总裁&#xff09;、分管安全生产的副总经理&#xff08;副…

Nodejs 常见版本管理工具(nvm、n、fnm、nvs、nodenv)

一、简介 Node.js 中文文档、Node.js 英文文档 通过包管理器安装 Node.js 插件列表 官方地址&#xff1a;https://nodejs.org/zh-cn/download/package-manager 国内地址&#xff1a;http://website2.nodejs.cn/download/package-manager/ 其他地址&#xff1a;http://dev.no…

不是吧,3 : 00 面试,还没10分钟就出来了,问的也太...

从外包出来&#xff0c;没想到死在另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到2月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内推我去…

Windows 10字体模糊发虚! 如何解决?

在使用Windows 10操作系统的过程中&#xff0c;有些用户可能会遇到字体模糊、发虚的问题&#xff0c;这给用户的视觉体验带来了不小的困扰。本文将介绍几种解决Windows 10字体模糊发虚问题的方法。 一、更新显卡驱动程序 如果更新显卡驱动程序后问题仍未解决&#xff0c;那么很…

前端HTML学习(二)

1、列表标签 列表标签概述&#xff1a;能够使用无序列表、有序列表、自定义列表标签&#xff0c;实现网页中列表结构的搭建。列表应用在网页中按照行展示关联性的内容&#xff0c;如:新闻列表、排行榜、账单等。 特点&#xff1a;按照行的方式&#xff0c;整齐显示内容 种类&a…

2023年北京.NET线下技术沙龙来了!大咖分享,还有精品好礼等你

MASA技术团队来北京啦&#xff01; 为了与北京的.NET开发者们更深入的交流学习&#xff0c;我们将在北京市举办一场.NET线下技术沙龙。同时也是希望通过举办这样的线下沙龙&#xff0c;让更多的.NET开发者了解我们&#xff0c;加入.NET开源技术生态&#xff0c;向更多的.NET开…

代码随想录复习 344反转字符串 541 反转字符串二

代码如下 func reverseString(s []byte) { left : 0 right : len(s)-1 for left < right { s[left],s[right] s[right],s[left] left right-- } } 541 反转字符串二 代码如下 func reverseStr(s string, k int) string { ss : []byte(s) for i : 0 ; i < len(s…

解决:component COMDLG32.OCX or one of…和 MSCOMCTL.OCX or one of...的解决方法

遇到的问题&#xff1a; 在做CTF题目 使用16进制转图片工具 出现了两个报错&#xff01; 解决方法&#xff1a; 第一步&#xff1a;下载COMDLG32.OCX 程序&#xff08;可以去官网&#xff09;也可也使用我的百度网盘 http://链接&#xff1a;https://pan.baidu.com/s/1-1KNg…