国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

PAT-B 1028. 人口普查(20)

2019-11-08 18:40:34
字體:
來源:轉載
供稿:網友

題目鏈接在此。

第一次感覺自己的想法比《算法筆記》的“酷炫”,開心~ 我的思路也是脫胎于《算法筆記》對這個題目的解法中兩個日期的比較。

我的思路

這個題目的根本其實就是兩個時間的比較,這給我的第一個想法是常規做法(后面的《算法筆記》思路會講到),后來寫到一半,突然想起了《算法筆記》中對上面那個題目中兩個日期的比較方法: 正常讀入,然后用一個long long型變量 = year*10000+month*100+day; 這樣兩個日期比較就非常直接了~

這個明白了之后,此題就基本解決。但是第一次提交之后發現有一個點過不去,就想應該是邊界數據沒有過,后來測試了左右邊界,發現并不是這里的問題,看了《算法筆記》才發現邊界數據還存在一種情況,那就是所有輸入都不合法,特判一下就可以了。

#include<stdio.h> #include<string.h> int main(){ int n; int year,month,day; int count = 0; //有效年齡個數 char name[6], max_name[6], min_name[6]; long long maxAge = 20140907, minAge = 18140905; scanf("%d",&n); for(int i = 0; i < n; i++){ scanf("%s %d/%d/%d",&name,&year,&month,&day); //方便年齡比較 long long birth = year*10000+month*100+day; //過濾不合理日期 if(birth < 18140906 || birth > 20140906); else{ //得到最年長和最年輕的人 count++; if(birth < maxAge){ //得到最年長 strcpy(max_name,name); maxAge = birth; } if(birth > minAge){ //得到最年輕 strcpy(min_name,name); minAge = birth; } } } if(count) 算法筆記思路

算法筆記的思路就是用最常規的方法比較兩個日期的大小關系。

#include<stdio.h>struct info{ char name[10]; int y,m,d;}youngest,oldest,temp,left,right; //left & right 用來保存兩個邊界 bool lessEqu(info a, info b){ //if a's date <= b's date return true if(a.y != b.y) return a.y <= b.y; else if(a.m != b.m) return a.m <= b.m; else return a.d <= b.d;}bool moreEqu(info a, info b){ //if a's date >= b's date return true if(a.y != b.y) return a.y >= b.y; else if(a.m != b.m) return a.m >= b.m; else return a.d >= b.d;}void init(){ right.y = oldest.y = 2014; left.y = youngest.y = 1814; //pay attention to oldest & youngest's year. right.m = left.m = youngest.m = oldest.m = 9; right.d = left.d = youngest.d = oldest.d = 6;} int main(){ int n; int count = 0; scanf("%d",&n); init(); for(int i = 0; i < n; i++){ scanf("%s %d/%d/%d",temp.name,&temp.y,&temp.m,&temp.d); if(lessEqu(temp,right) && moreEqu(temp,left)){ //如果日期合法 count++; if(lessEqu(temp,oldest)){ //更新oldest oldest = temp; } if(moreEqu(temp,youngest)){ //更新youngest youngest = temp; } } } if(count) printf("%d %s %s/n",count,oldest.name,youngest.name); else printf("0/n"); return 0;}

在擼這段代碼過程中,粗心以及邏輯上造成了一些錯誤,比如兩個時間比較的函數、oldest.y和youngest.y的初值、temp和left、right的關系,這些是比較容易出錯的。

記錄在這里的目的是掌握時間比較的方法: 1. 先比年,年如果不相等,直接可以比較出 2. 年如果相等,則需要比月,月不等,則可以直接比較出 3. 月如果相等,則需要比天

總結

掌握并運用了常規的日期比較方法掌握并運用了long long型的日期比較方法掌握并運用了結構體的直接賦值(參考博客)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浙江省| 长乐市| 陈巴尔虎旗| 塘沽区| 古蔺县| 和静县| 多伦县| 阳原县| 双江| 天镇县| 上杭县| 广饶县| 遂川县| 彭山县| 澜沧| 合水县| 长宁县| 岱山县| 离岛区| 上林县| 涟水县| 临夏县| 建德市| 醴陵市| 岫岩| 清徐县| 龙胜| 万源市| 八宿县| 海晏县| 镇巴县| 临江市| 阿拉善左旗| 内丘县| 尚义县| 明光市| 永平县| 昌平区| 铁岭市| 绥芬河市| 油尖旺区|