日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1028 人口普查

發(fā)布時(shí)間:2024/4/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1028 人口普查 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

某城鎮(zhèn)進(jìn)行人口普查,得到了全體居民的生日?,F(xiàn)請(qǐng)你寫個(gè)程序,找出鎮(zhèn)上最年長和最年輕的人。

這里確保每個(gè)輸入的日期都是合法的,但不一定是合理的——假設(shè)已知鎮(zhèn)上沒有超過 200 歲的老人,而今天是 2014 年 9 月 6 日,所以超過 200 歲的生日和未出生的生日都是不合理的,應(yīng)該被過濾掉。

輸入格式:

輸入在第一行給出正整數(shù)?N,取值在(0,10?5??];隨后?N?行,每行給出 1 個(gè)人的姓名(由不超過 5 個(gè)英文字母組成的字符串)、以及按?yyyy/mm/dd(即年/月/日)格式給出的生日。題目保證最年長和最年輕的人沒有并列。

輸出格式:

在一行中順序輸出有效生日的個(gè)數(shù)、最年長人和最年輕人的姓名,其間以空格分隔。

輸入樣例:

5 John 2001/05/12 Tom 1814/09/06 Ann 2121/01/30 James 1814/09/05 Steve 1967/11/20

輸出樣例:

3 Tom John ? 思路:我這里相當(dāng)于是枚舉的寫法,略微有點(diǎn)復(fù)雜,用string存出生日期寫可能會(huì)更簡單一點(diǎn),有個(gè)坑點(diǎn)就是有效生日個(gè)數(shù)為0的情況...... 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;//有效生日數(shù) 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 }

?

?補(bǔ)充用string寫的解法,相比于上面的解法更簡單,(果然還是string好用)......

?

?

1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 #include<cstdio> 5 #include<algorithm> 6 #include<map> 7 #include<set> 8 #include<vector> 9 using namespace std; 10 #define ll long long 11 #define inf 99999999 12 int main() 13 { 14 string str1="2014/09/06",str2="1814/09/06"; 15 string min="2014/09/06",max="1814/09/06"; 16 string min_name,max_name; 17 int N; 18 scanf("%d",&N); 19 string name,date; 20 int sum=0; 21 for(int i=1;i<=N;i++) 22 { 23 cin>>name>>date; 24 if(date>=str2&&date<=str1) 25 { 26 sum++; 27 if(date<min) 28 { 29 min=date; 30 min_name=name; 31 } 32 if(date>max) 33 { 34 max=date; 35 max_name=name; 36 } 37 } 38 } 39 if(sum==0)//sum為0直接特判 40 printf("%d\n",sum); 41 else 42 cout<<sum<<" "<<min_name<<" "<<max_name<<endl; 43 return 0; 44 }

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/xwl3109377858/p/10473219.html

總結(jié)

以上是生活随笔為你收集整理的1028 人口普查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。