人口普查(20) PAT

某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。

题目描述

某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。



这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过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



然后呢本人遇到了如上的麻烦,在百度以后,得知段错误出现是因为可能所以得日期都是不合理的,所以要判断合理日期个数。可是我判断了,还是段错误,代码如下:请大佬指教。
 1 #include<iostream>
 2 #include<vector>
 3 struct people{
 4     char name[5];
 5     int y;
 6     int m;
 7     int d;
 8     int c;
 9 };
10 int main(){
11     int n;
12     people p[10000];
13     people p1,p2;
14     scanf("%d",&n);
15     int i=0;
16     int k=0;
17     while(n--){
18     scanf("%s %d/%d/%d",p[i].name,&p[i].y,&p[i].m,&p[i].d);
19     p[i].y*=10000;
20     p[i].m*=100;
21     p[i].c=p[i].y+p[i].m+p[i].d;
22     if(p[i].c>=18140906&&p[i].c<=20140906){
23         k++;
24         if(k==1){
25             p1=p[i];
26             p2=p[i];
27         }
28         else if(p[i].c<p1.c) p1=p[i];
29         else if(p[i].c>p2.c)  p2=p[i];
30     }
31     
32     
33     i++;
34 }
35 if(k!=0) 
36 printf("%d %s %s",k,p1.name,p2.name);
37 else printf("0");
38 }

 

posted @ 2018-07-12 15:12  fromzore  阅读(446)  评论(0编辑  收藏  举报