pat 乙级 1014 福尔摩斯的约会 (C++)
題目
大偵探福爾摩斯接到一張奇怪的字條: 我們約會吧!3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大偵探很快就明白了,字條上奇怪的亂碼實際上就是約會的時間星期四 14:04.
因為前面兩字符串中第 1 對相同的大寫英文字母(大小寫有區分)是第 4 個字母 D,代表星期四;第 2 對相同的字符是 E ,那是第 5 個英文字母,代表一天里的第 14 個鐘頭(于是一天的 0 點到 23 點由數字 0 到 9、以及大寫字母 A 到 N 表示);后面兩字符串第 1 對相同的英文字母 s 出現在第 4 個位置(從 0 開始計數)上,代表第 4 分鐘。
現給定兩對字符串,請幫助福爾摩斯解碼得到約會的時間。
輸入格式:
輸入在 4 行中分別給出 4 個非空、不包含空格、且長度不超過 60 的字符串。
輸出格式:
在一行中輸出約會的時間,格式為 DAY HH:MM,其中 DAY 是某星期的 3 字符縮寫,即 MON 表示星期一,TUE 表示星期二,WED 表示星期三,THU 表示星期四,FRI 表示星期五,SAT 表示星期六,SUN 表示星期日。題目輸入保證每個測試存在唯一解。
輸入樣例:
3485djDkxh4hhGE
2984akDfkkkkggEdsb
s&hgsfdk
d&Hyscvnm
輸出樣例:
THU 14:04
分析
這個題,題目很長,有點點繞,看似是一個推理題,實則是一個字符匹配題。不要慌,只需分別求約會時禮拜幾,約會時幾點,具體分鐘然后連起來就可以了。
- 對于禮拜幾。一個星期共7天,所以只需找到前面兩個字符串中字符相等(第一次) 且 屬于A~G的字符
- 對于幾點。分為0-9點和10-23點,前者,在前加0輸出;后者則是找出前面兩個字符串中字符相等(第二次) 且 屬于A~N的字符。
- 對于具體分鐘。0-9時,在前加0輸出;10-59時,轉為字符串輸出。
AC代碼
#include<iostream> #include<string> #include<cstring> using namespace std; string Day(char c) {string day;switch(c){case 'A':day="MON";break;case 'B':day="TUE";break;case 'C':day="WED";break;case 'D':day="THU";break;case 'E':day="FRI";break;case 'F':day="SAT";break;case 'G':day="SUN";break;}return day; } string Hour(char c) {string day;switch(c){case 'A':day="10";break;case 'B':day="11";break;case 'C':day="12";break;case 'D':day="13";break;case 'E':day="14";break;case 'F':day="15";break;case 'G':day="16";break;case 'H':day="17";break;case 'I':day="18";break;case 'J':day="19";break;case 'K':day="20";break;case 'L':day="21";break;case 'M':day="22";break;case 'N':day="23";break;}return day; }int main() {int i,flag=0;string str[4],day,hour,min;char ch[4][61];for(i=0;i<4;i++){cin>>str[i];strcpy(ch[i],str[i].c_str());}//求約會是禮拜幾和幾點for(i=0;i<61;i++){if(ch[0][i]==ch[1][i]){if(ch[0][i]>='A'&&ch[0][i]<='G'&&flag==0){day=Day(ch[0][i]);flag=1;continue; }int temp=ch[0][i]-'0';if(temp>=0&&temp<9&&flag==1){hour="0"+to_string(temp);break;}if(ch[0][i]>='A'&&ch[0][i]<='N'&&flag==1){hour=Hour(ch[0][i]);break;}}}//分鐘for(i=0;i<61;i++){if(ch[2][i]==ch[3][i]){if((ch[2][i]>='a'&&ch[2][i]<='z')||(ch[2][i]>='A'&&ch[2][i]<='Z')){if(i<=9){min="0"+to_string(i);break;}else{min=to_string(i);break;}}}}cout<<day+" "+hour+":"+min;return 0; }總結
- 代碼長度比較長,選擇數據類型時沒有太多思考,后面會優化一下。
- 在提交的過程中,總是有個點不得分。后面仔細讀題,發現,開始讀題理解錯誤。求分鐘時它是以第3、4字符串中第一對相同字母出現的位置來判定的,以為字母要求小寫字母,其實只是舉例而已。
正在刷pat的菜鳥一枚,希望得到鼓勵與支持
有任何問題,在評論區留言告訴我哦
更多題解
pat 乙級 題解匯總(持續更新)(C++)
總結
以上是生活随笔為你收集整理的pat 乙级 1014 福尔摩斯的约会 (C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux查看java线程状态(linu
- 下一篇: 安卓压缩软件哪个最好(安卓压缩)