1028 人口普查
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 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
思路:我这里相当于是枚举的写法,略微有点复杂,用string存出生日期写可能会更简单一点,有个坑点就是有效生日个数为0的情况...... 1 #include2 #include 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;i3 #include<string.h> 4 #include 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 ) ) 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 ) 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 }
补充用string写的解法,相比于上面的解法更简单,(果然还是string好用)......
1 #include2 #include "<3 #include 4 #include 5 #include 6 #include " "< endl; 43 return 0; 44 }
转载于:https://www.cnblogs.com/xwl3109377858/p/10473219.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
