PTA乙级1028 人口普查
PTA乙级 人口普查 1028
题目
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 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
代码
#include<stdio.h>
struct Birthday{char str[6];//姓名int y,m,d;//出生日期int flag;//是否有效int x;
}a[100001];
int main(){int N,i;scanf("%d",&N);for(i=0;i<N;i++){scanf("%s",a[i].str);scanf("%04d/%02d/%02d",&a[i].y,&a[i].m,&a[i].d);a[i].x=a[i].y*10000+a[i].m*100+a[i].d;//将出生日期转变为8位整数,这里是程序的精髓,转化为整数形式//易于判断数据是否有效和后续比较年龄大小 if(a[i].x<18140906)//if(a[i].y<1814||(a[i].y==1814&&a[i].m<9)||(a[i].y==1814&&a[i].m==9&&a[i].d<6))a[i].flag=0;else if(a[i].x>20140906)//else if(a[i].y>2014||(a[i].y==2014&&a[i].m>9)||(a[i].y==2014&&a[i].m==9&&a[i].d>6))a[i].flag=0;elsea[i].flag=1;}int num=0,maxbir=20140906,minbir=18140906;//maxbir为最年长者,初始值取最年幼的出生日期20140906;min同理int m,n;//m,n用于记录最年长和年幼者数组下标 for(i=0;i<N;i++){if(a[i].flag){num++;if(maxbir>=a[i].x){//此处求最年长者,故其出生日期最早,即x数值最小 maxbir=a[i].x;m=i;}if(minbir<=a[i].x){//此处求最年幼者,故其出生日期最晚,即x数值最大 minbir=a[i].x;n=i;}}} printf("%d",num);if(num){//此处设置if语句是考虑num==0时,应该只输出0,且末尾无空格 printf(" ");printf("%s ",a[m].str);printf("%s",a[n].str);}return 0;
}
反思
1.利用链表来储存数据可以在一组中储存不同类型
2.将出生日期转化为八位数进行比较大小,简化比较过程
3.不将符合条件的组单独写出,直接返回下标,再一次简化算法
PTA乙级1028 人口普查相关推荐
- C++学习之路 | PTA乙级—— 1028 人口普查 (20 分)(精简)
1028 人口普查 (20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 2 ...
- PAT乙级1028 人口普查 (20 分)
1028 人口普查 (20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 2 ...
- pat 乙级 1028 人口普查(C++)
题目 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 200 岁的老人,而今天是 2 ...
- PAT乙级—1028. 人口普查(20)-native
某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过200岁的老人,而今天是2014年9月 ...
- pat乙级 1028 人口普查
某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超过 200 岁的老人,而今天是 2014 ...
- PAT乙级(1028 人口普查)
输入格式: 输入在第一行给出正整数 N,取值在(0,105]:随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串).以及按 yyyy/mm/dd(即年/月/日)格式给出 ...
- PAT乙级C语言 1028 人口普查
思路 判断是否符合要求并计数,把符合的结构输入另一个数组,对该数组进行qsort排序,然后输出第一个和最后一个元素里的相关成员 推荐 我觉得这个写的很好(呜呜呜我写了七十几行人家写二十几行就好了,差距 ...
- PTA 1028 人口普查 (c语言)
1028 人口普查 (20 分) 分析:这个题还是比较直接的,没有什么坑.我在这里是写了一个专门用以比较的函数,然后比较的时候把他们的年月日当成一个大数字来比较. typedef struct{cha ...
- 【PAT乙级】1028 人口普查
目录 一.题目 二.我的AC代码 一.题目 1028 人口普查 (20分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合 ...
最新文章
- HBuilderX 连接电脑的模拟器问题
- sql语句中as的用法和作用
- java快速排序直观演示代码,排序算法总结(含动图演示和Java代码实现)
- 第二章 物理层 2,3 数据通信基础知识 [计算机网络笔记]
- MyBatis 源码自我解读
- 单片机并口应用实验c语言,1单片机并口简单应用(流水灯).docx
- c++ new操作符(new operator)、operator new、placement new 、operator new[] 及相对应的delete 操作符、operator delete
- android日历控件使用,Android学习教程之日历控件使用(7)
- 最好的jpg转pdf软件
- PowerMill2019基础到三四五轴编程视频教程全
- SpringBoot application.properties读取属性配置文件中文显示为乱码问题的解决
- 磨金石教育摄影技能干货分享|有哪些让你难以忘怀的人文摄影照片
- Google Play开发者账号注册
- JDBC数据库驱动的下载与安装与连接
- 闭锁java_实例讲解Java并发编程之闭锁
- 【机器学习】孤立森林
- JSOI2019招待
- Python---数据分析---绘制条形图---横竖条形图
- 服务器放在北极什么位置,服务器放在北极和深海,是谁给了你勇气?
- D - The Beatles CodeForces - 1143D