PAT乙级真题及训练集(12)--1028. 人口普查(20)
2017-06-20 21:25
351 查看
1028. 人口普查(20)
时间限制200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过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
提交代码
/** 作者:一叶扁舟 时间:17:22 2017/6/19 思路: 本人并没有用传统的方法去将输入的出生日期转成数字进行比较的方法,在C用字符串可以 直接这样用更加简单快捷 注:如果还要对输入的日期的合法性进行判断即如2月30号这天是错误的判断,可以将数据转成静态数字进行判断 字符直接从输入时候转成数字的简单技巧: scanf("%s %d/%d/%d", &name, &year, &month, &day); */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm> using namespace std; #define SIZE 100001 typedef struct Person{ char name[10];//名字 char birthday[20];//出生的年月日 }Person; //年龄是递增排序,即越靠前年龄越小 bool cmp(Person a, Person b){ return strcmp(a.birthday,b.birthday) >= 0; } int main(){ char maxBirthday[20] = "1814/09/06"; char minBirthday[20] = "2014/09/06"; char name[10]; char birthday[20]; Person person[SIZE]; int count = 0; int N;//普查人口的数目 scanf("%d",&N); for (int i = 0; i < N; i++){ scanf("%s %s",name,birthday); if (strcmp(birthday, maxBirthday) >= 0 && strcmp(birthday, minBirthday) <= 0){ //验证输入的日期在合理的范围内 strcpy(person[count].name, name); strcpy(person[count].birthday, birthday); count++; } } //输出结果 if (count == 0){ printf("0\n"); } else{ //只有数量大于1的时候才会对出生日期进行排序,事实上不加这个判断pat也能测试通过,个人认为当边界为1时,调用sort函数时 //会出现错误 if (count > 1){ sort(person, person + count, cmp); } printf("%d", count); //输出年龄年龄最年长和年龄最年轻的人名 printf(" %s", person[count - 1].name); printf(" %s", person[0].name); } system("pause"); return 0; }
相关文章推荐
- 1028. 人口普查(20)-浙大PAT乙级真题java实现
- 1028. 人口普查(20) PAT乙级真题
- 1028. 人口普查(20)-PAT乙级真题
- PAT乙级 1028. 人口普查(20)--字符串的妙用,两种方法解答
- PAT 乙级 1028. 人口普查(20)
- PAT乙级真题及训练集(22)--1009. 说反话 (20)
- PAT-乙级-1028. 人口普查(20)
- 1028. 人口普查(20)PAT乙级
- 1028. 人口普查(20)--PAT乙级
- PAT乙级真题及训练集(6)--1008. 数组元素循环右移问题 (20)
- PAT 乙级 1028. 人口普查(20)
- PAT乙级.1028. 人口普查(20)
- 浙江大学PAT_乙级_1028. 人口普查(20)
- PAT乙级真题及训练集(7)--1012. 数字分类 (20)
- PAT-乙级-1028. 人口普查(20)
- PAT乙级真题及训练集(20)--1025. 反转链表 (25)
- 【PAT乙级真题及训练集】1002. 写出这个数 (20)
- PAT乙级 1028. 人口普查(20)
- pat乙级1028. 人口普查(20)
- PAT乙级(Basic Level)真题-1028 统计同成绩学生(20)