测试点3错的来:1028 人口普查 (20分)(解题报告)
立志用更少的代码做更高效的表达
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。
输入格式:
输入在第一行给出正整数 N,取值在(0,10^5 ];随后 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
问题分析:
两种解法:
解法一:定义结构体, 存放数据, 定义结构体比较大小的函数, 分别比较出最大值和最小值即可。
解法二:由于所有日期都是合法的, 因此只需比较日期是否在范围内即可。 于是可以将日期转化为int型变量比较, 提高效率。
要注意的是:
1、无论哪种解法, 都一定要输入一个数,就判断一个数, 即时存储和操作, 而不能存放在数组里再遍历, 这样会超时。
2、如果依然超时, 可以试着将C++代码换成C语言代码, 因为C语言比C++快一些。
3、如果没有符合的,则输出0, 后面没有空格。 (测试点三)
二更:
经评论区提醒, 可以采用部分模拟的实现方法, 只用了16行代码实现AC。 比起结构体这种中规中矩的模拟解法效率高出不少。
一更:结构体解法
#include<iostream>
using namespace std;struct Birthday{string name;int year, month, day;
}; bool compare(Birthday b1, Birthday b2){ //比较,按年月日排序 if(b1.year != b2.year) return b1.year<b2.year;else {if(b1.month != b2.month) return b1.month<b2.month;else {return b1.day < b2.day;}}
} bool fuhe(Birthday b1) { //判断是否符合if(b1.year < 1814) return false;else if(b1.year == 1814) {if(b1.month < 9) return false;else if(b1.month == 9) {if(b1.day < 6) return false;}}if(b1.year>2014) return false;else if(b1.year == 2014) {if(b1.month > 9) return false;else if(b1.month == 9) {if(b1.day > 6) return false;}}return true;
}Birthday fuzhi(Birthday b1, Birthday b2) { //结构体赋值b1.name = b2.name;b1.year = b2.year;b1.month = b2.month;b1.day = b2.day;return b1;
}int main() {Birthday Max, Min;int n; cin>>n; int num1 = 0; //记录符合的个数 bool flag = true;for(int i = 0; i < n; i++) {Birthday B;cin >> B.name; scanf("%d/%d/%d", &B.year, &B.month, &B.day);if(fuhe(B)) {num1++; if(flag) { //第一次循环时,先给Max和Min赋值flag = false;Max = fuzhi(Max, B);Min = fuzhi(Min, B); } else {if(compare(Max, B)) {Max = fuzhi(Max, B);}if(compare(B, Min)) {Min = fuzhi(Min, B);}}}}if(num1 == 0) cout << 0;else cout << num1 << ' ' << Min.name << ' ' << Max.name << endl;
return 0; }
二更代码
#include<bits/stdc++.h>
using namespace std;
int main() {int n, num = 0; cin >> n; string s1, s2, min_y = "9", max_y = "0", min_n, max_n; while(n--) {cin >> s1 >>s2;if(!(s2 >= "1814/09/06" && s2 <= "2014/09/06")) continue;num++; if(min_y > s2) { min_y = s2; min_n = s1; }if(max_y < s2) { max_y = s2; max_n = s1; }}cout << num;if(num) cout << ' ' << min_n << ' ' << max_n << '\n';return 0;
}
——错过落日余晖,请记得还有漫天星辰
测试点3错的来:1028 人口普查 (20分)(解题报告)相关推荐
- 1028 人口普查 (20 分)测试点3格式错误
1028 人口普查 (20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 2 ...
- 【2020模拟考试T3】【PAT乙】1028 人口普查 (20分) 字符串比较
problem 1028 人口普查 (20分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇 ...
- PAT乙级1028 人口普查 (20 分)
1028 人口普查 (20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 2 ...
- C++学习之路 | PTA乙级—— 1028 人口普查 (20 分)(精简)
1028 人口普查 (20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 2 ...
- 1028 人口普查 (20 分)C++ 示例代码
1028 人口普查 (20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 2 ...
- 【PAT (Basic Level) 】1028 人口普查 (20 分)
某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人.这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 200 岁的老人,而今天是 2014 ...
- 1028 人口普查 (20 分)(c语言)
某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 200 岁的老人,而今天是 2014 ...
- 1028 人口普查 (20分)
某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 200 岁的老人,而今天是 2014 ...
- PAT 1028 人口普查 (20 分)
题目描述: 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 200 岁的老人,而今天 ...
最新文章
- vue响应式给数组中的对象添加新属性
- OpenCV+python:读取图片
- Adobe Illustrator CS6 界面文字按钮太小,高分屏win10PS/AI等软件界面字太小解决方法
- C 语言编程 — GCC 工具链
- Codeforces Round #361 (Div. 2) B. Mike and Shortcuts bfs
- opencv读取手机摄像头
- linux学习之路--(六)用户及权限详解
- MFC 蜂鸣声或播放音频
- MySQL 数据库导出导入操作
- 阿里为什么禁用Executors创建线程池?
- script标签中的defer和async属性
- rabbitmq python 发送失败_python rabbitmq no_ack=false
- python的matplotlib画图时独立窗口_解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题...
- android9手机电池管家,腾讯电池管家APP
- 【数论】快速分解质因数的技巧 筛法求素数(快速筛)
- java导入导出excel文件
- 极速掌握HTML(一)基础入门
- Centi和HandCash共同开发支付握手协议
- Visual Studio Code 代码显示空格等空白符的方法
- ES6常问面试题(Promise,async和await 等)