PTA乙级1028-----人口普查 (20分)

1028 人口普查 (20分)

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

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

 首次通过代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main(){
 4     int sum=0,num;
 5     int max_age;
 6     int min_age;
 7     int c_day,c_month,c_year;
 8     int c;
 9     char povit[10]={0},str1[15]={0},str2[15]={0};
10     scanf("%d",&num);
11     for(int i=0;i<num;i++){
12            scanf("%s %d/%d/%d",povit,&c_year,&c_month,&c_day);
13            if(c_year>2014) continue;
14            c=c_day+c_month*30+(c_year-1814)*365; 
15            if(c>=276&&c<=73276)  {
16                sum++;
17              if(sum==1) {
18                  max_age=c;
19                  min_age=c;
20                  strcpy(str1,povit);
21                  strcpy(str2,povit);
22            }
23            else {
24                if(c<max_age) {max_age=c;strcpy(str1,povit);}
25                else if(c>min_age) {min_age=c;strcpy(str2,povit);}
26            }
27     }
28 }
29 if(sum==0) printf("0");
30  else printf("%d %s %s",sum,str1,str2);
31 return 0;
32 }
View Code

猜你喜欢

转载自www.cnblogs.com/a982961222/p/12352955.html