P 1028 人口普查
转跳点:
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。
输入格式:
输入在第一行给出正整数 N,取值在(;随后 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
这道题就是简单的枝减法就可以完成了,也不用开数组,在比较过程中我们只需要记录下最大年纪的人最小年纪的人和输入值。注意所有人出生日期不合法的可能。
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //比较喜欢宏定义,这样写代码移植性强
#define EARLIESTYEAR 1814
#define NOWYEAR 2014
#define NOWMONTH 9
#define NOWDAY 6 typedef struct
{
char name[6];
int year, month, day;
} PersonalData; //输入出生日期合法判断
static int Islegal(PersonalData *temp);
//查找最大最小年龄的人
static void Find(PersonalData *MAX, PersonalData *MIN, const PersonalData *temp); int main(void)
{
int n, count = 0;
PersonalData theoldest = {"\0", 2015, 12, 31}, theyoungest = {"\0", 1813, 1, 1};
scanf("%d", &n); for (int i = 0; i < n; i++)
{
PersonalData temp;
scanf("%s %d/%d/%d", temp.name, &temp.year, &temp.month, &temp.day); if (Islegal(&temp))
{
continue;
}
Find(&theoldest, &theyoungest, &temp);
count++;
} //这里可以直接加个if特判count == 0的情况,我脑子有坑才这么写
printf("%d%s%s%s%s", count, 0 == count ? "" : " ", 0 == count ? "" : theoldest.name, 0 == count ? "" : " ", 0 == count ? "" : theyoungest.name); return 0;
} static void Find(PersonalData *MAX, PersonalData *MIN, const PersonalData *temp)
{
//分了三种情况,出生年月日小于于最大值的年月日的就交换
//生的越早,年份越小,年纪越老
if ((MAX->year > temp->year) ||
(MAX->year == temp->year && MAX->month > temp->month) ||
(MAX->year == temp->year && MAX->month == temp->month && MAX->day > temp->day))
{
*MAX = *temp;
}
//同理
if ((MIN->year < temp->year) ||
(MIN->year == temp->year && MIN->month < temp->month) ||
(MIN->year == temp->year && MIN->month == temp->month && MIN->day < temp->day))
{
*MIN = *temp;
}
} static int Islegal(PersonalData *temp)
{
//年超出的
if (temp->year > NOWYEAR || temp->year < EARLIESTYEAR)
{
return 1;
}
//月份超出的
if ((NOWYEAR == temp->year && temp->month > NOWMONTH) ||
(EARLIESTYEAR == temp->year && temp->month < NOWMONTH))
{
return 1;
}
//日期超出的
if ((NOWYEAR == temp->year && NOWMONTH == temp->month && temp->day > NOWDAY) ||
(EARLIESTYEAR == temp->year && NOWMONTH == temp->month && temp->day < NOWDAY))
{
return 1;
} return 0;
}
贡献一组测试用例
5
John 2051/05/12
Tom 1814/01/06
Ann 2121/01/30
James 1814/09/05
Steve 1671/11/20
结果
0 (没有空格~~~)
PTA不易,诸君共勉!
P 1028 人口普查的更多相关文章
- PAT乙级 1028. 人口普查(20)
1028. 人口普查(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 某城镇进行人口普查,得到了全体居民的 ...
- PAT-乙级-1028. 人口普查(20)
1028. 人口普查(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 某城镇进行人口普查,得到了全体居民的 ...
- PAT 1028 人口普查(20)(STL-set+思路+测试点分析)
1028 人口普查(20)(20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超 ...
- PAT (Basic Level) Practise (中文)-1028. 人口普查(20)
PAT (Basic Level) Practise (中文)-1028. 人口普查(20) http://www.patest.cn/contests/pat-b-practise/1028 某 ...
- PATB 1028. 人口普查(20)
1028. 人口普查(20) 注意特判合理人数为0,否则格式错误.很暴力的sort排序找出最大最小. 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Stan ...
- PAT(B) 1028 人口普查(C)字符串
题目链接:1028 人口普查 (20 point(s)) 题目描述 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是 ...
- PAT 1028. 人口普查(20)
某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过200岁的老人,而今天是2014年9月 ...
- PAT (Basic Level) Practise:1028. 人口普查
[题目链接] 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是 ...
- PAT 1028 人口普查
https://pintia.cn/problem-sets/994805260223102976/problems/994805293282607104 某城镇进行人口普查,得到了全体居民的生日.现 ...
随机推荐
- oracle练习-day03
.创建表空间.创建用户赋权限.创建表语法:.常见的数据类型字符 myname ) varchar2:推荐使用这个 可变长度最大字符 myname varchar2() 字 ...
- Django 连接 Mysql (8.0.16) 失败
首先,确认数据库配置正确无误: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # or use: mysql.con ...
- 解决maven项目创建过慢的问题,一直resolving dependencies...
##方法一: 1.在创建项目时设置其Properties (我大多在创建项目时 就解决这个问题) 创建项目的时候,在Properties属性面板中添加一项:archetypeCatalog = int ...
- 闲谈“如何优化SSH框架的项目”
使用struts框架的好处之一就是所有action类继承一个基类,将访问控制在基类中处理.2.所有的action类都继承自baseaction,一个资源对应一个action类.1.实现一个继承自str ...
- 留学Essay写作:精准用词很重要
很多觉得自己英语成绩还行的同学经常在自己的文章里用一些浮夸或者是难度特别大的词语,以显示自己的英语水平.当然了,成功了倒也无可厚非,要是有些词语用错了那可是会被别人笑掉大牙的.因此英语中的精准用词就成 ...
- 简单模拟IOC容器:为添加了@Autowired的属性赋值(初始值)
创建@Autowired注解 package com.zzj.test; import java.lang.annotation.ElementType; import java.lang.annot ...
- C#中使用设置(Settings.settings) Properties.Settings.Default .(配置文件相当重要)
C#中使用设置(Settings.settings) Properties.Settings.Default . 2016年08月04日 15:02:43 zxd9790902 阅读数:10664更多 ...
- burpsite 和jdk的配置
最近小白再安装工具,首先是java的jdk,小白的电脑重装系统之后以前装的就没有了,然后记性不好的小白就开始百度了,百度上说是需要配置java_home和classpath路径然后再去编辑path路径 ...
- Maven添加Tomcat插件实现热部署
Maven热部署,顾名思义就是可以不影响项目在服务器中的运行情况,可以实现项目代码的更新,减少启动,编译时间,达到快速开发的目的,也不需要手动拷贝war包到远程项目,可以直接将项目以及war包部署到远 ...
- cmf公共函数解析
cmf公共函数解析-common.php 路径:thinkcmf\simplewind\cmf\common.php方法: 方法 作用 返回值 cmf_get_current_admin_id ...