某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 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<stdio.h>
2 #include<math.h>
3 #include<string.h>
4 #include<stdlib.h>
5 typedef struct birth
6 {
7 char name[6];
8 int year;
9 int month;
10 int day;
11 } St;
12 int main()
13 {
14 int n;
15 scanf("%d",&n);
16 St num[n];
17 int t=n;//ÓÐЧÉúÈÕÊý
18 int maxyear=-1,maxmonth=-1,maxday=-1,minyear=9999,minmonth=9999,minday=9999;
19 for(int i=0;i<n;i++)
20 {
21 scanf("%s %d/%d/%d",num[i].name,&num[i].year,&num[i].month,&num[i].day);
22 if(((num[i].year<1814)||((num[i].year==1814)&&(num[i].month<9))||((num[i].year==1814)&&(num[i].month==9)&&(num[i].day<6)))||((num[i].year>2014)||((num[i].year==2014)&&(num[i].month>9))||((num[i].year==2014)&&(num[i].month==9)&&(num[i].day>6))))
23 {
24 t--;
25 continue;
26 }
27 if(num[i].year>maxyear)
28 {
29 maxyear=num[i].year;
30 maxmonth=num[i].month;
31 maxday=num[i].day;
32 }
33 else if(num[i].year==maxyear&&num[i].month>maxmonth)
34 {
35 maxmonth=num[i].month;
36 maxday=num[i].day;
37 }
38 else if(num[i].year==maxyear&&num[i].month==maxmonth&&num[i].day>maxday)
39 {
40 maxday=num[i].day;
41 }
42 if(num[i].year<minyear)
43 {
44 minyear=num[i].year;
45 minmonth=num[i].month;
46 minday=num[i].day;
47 }
48 else if(num[i].year==minyear&&num[i].month<minmonth)
49 {
50 minmonth=num[i].month;
51 minday=num[i].day;
52 }
53 else if(num[i].year==minyear&&num[i].month==minmonth&&num[i].day<minday)
54 {
55 minday=num[i].day;
56 }
57 }
58 if(t==0)
59 printf("%d",t);
60 else
61 printf("%d ",t);
62 for(int i=0;i<n;i++)
63 {
64 if(num[i].year==minyear&&num[i].month==minmonth&&num[i].day==minday)
65 printf("%s ",num[i].name);
66 }
67 for(int i=0;i<n;i++)
68 {
69 if(num[i].year==maxyear&&num[i].month==maxmonth&&num[i].day==maxday)
70 printf("%s",num[i].name);
71 }
72 return 0;
73 }
原文:https://www.cnblogs.com/xwl3109377858/p/10473219.html