1028. 人口普查(20)--PAT乙级
2017-09-26 17:03
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
分析:主要是字符串的处理及最大值及最小值的查找。详细见代码。
代码:
#include<stdio.h> #define Max 100000 + 5 struct { char name[6]; char date[11]; }people[Max]; void Date(char date[], int &year, int &month, int &day)//从Date字符串分出年月日 { year = month = day = 0; for(int i = 0; i < 4; ++i) { year = year * 10 + date[i] - '0'; } for(int i = 5; i < 7; ++i) { month = month * 10 + date[i] - '0'; } for(int i = 8; i < 10; ++i) { day = day * 10 + date[i] - '0'; } } int cmp(char date1[], char date2[])//比较日期大小 { int year1, year2, month1, month2, day1, day2; Date(date1, year1, month1, day1); Date(date2, year2, month2, day2); if(year1 > year2) return -1; else if(year1 < year2) return 1; else if(month1 > month2) return -1; else if(month1 < month2) return 1; else if(day1 > day2) return -1; else if(day1 < day2) return 1; else return 0; } int main() { int N, year, month, day, num, max, min; year = month = day = num = max = min = 0; scanf("%d", &N); for(int i = 0; i < N; ++i) { scanf("%s%s",people[num].name, people[num].date); if(cmp(people[num].date, "2014/09/06") == -1 || cmp(people[num].date, "1814/09/06") == 1); else num++; } char *temp1 = "2014/9/7"; char *temp2 = "1814/9/5"; for(int i = 0; i < num; ++i)//找出最年长与最年幼的 { if(cmp(people[i].date, temp1) == 1) { max = i; temp1 = people[i].date; } if(cmp(people[i].date, temp2) == -1) { min = i; temp2 = people[i].date; } } if(num == 0)//如果有效人数为0输出0 很坑的一个地方 printf("0"); else printf("%d %s %s", num, people[max].name, people[min].name); }
相关文章推荐
- PAT乙级 1028. 人口普查(20)
- PAT乙级 1028. 人口普查(20)
- 1028. 人口普查(20)PAT乙级
- PAT乙级.1028. 人口普查(20)
- PAT乙级 1028. 人口普查(20)
- 1028. 人口普查(20) PAT乙级真题
- PAT乙级1028. 人口普查(20)
- PAT-乙级-1028. 人口普查(20)
- PAT乙级1028. 人口普查(20)
- [PAT乙级]1028. 人口普查(20)
- 1028. 人口普查(20)-PAT乙级真题
- 1028. 人口普查(20)-浙大PAT乙级真题java实现
- PAT-乙级-1028. 人口普查(20)
- PAT乙级 1028. 人口普查(20)--字符串的妙用,两种方法解答
- PAT乙级真题及训练集(12)--1028. 人口普查(20)
- 1028. 人口普查(20)-PAT乙级
- 乙级 PAT 1028. 人口普查(20)
- pat 乙级 1028. 人口普查(20)
- pat乙级1028. 人口普查(20)
- 浙江大学PAT_乙级_1028. 人口普查(20)