1014 福爾摩斯的約會 20 分

2022-08-12 18:27:15 字數 2319 閱讀 6697

大偵探福爾摩斯接到一張奇怪的字條:我們約會吧!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
分析:

本題其實不難,只是要注意很多細節,題目越長越要仔細,我們先來梳理下細節:

細節1:「前面兩字串中第1對相同的大寫英文本母(大小寫有區分)是第4個字母』d』,代表星期四」

注意到是第1對相同的字元,條件為大寫英文本母,字母在26個字母中的相對位置i就是「星期i」,如果得到i?很簡單,當前字母減去字母a+1就是i。

細節2:「第2對相同的字元是』e』,那是第5個英文本母」

注意到是第2對相同的字元!不是字母!而且該字元一定在第乙個字元之後!

細節3:「那是第5個英文本母,代表一天裡的第14個鐘頭(於是一天的0點到23點由數字0到9、以及大寫字母a到n表示)」

這句話就是說如果第2對相同的字元是數字字元,那麼只要減去字元0就表示0點到9點的時間,但是還有乙個隱藏細節,那就是0到9之前必須加上0!這點務必記住!如果第2對相同的字元是字母,那麼它一定是a到n,注意,不是a到z!是a到n!然後減去字元a再加1就是字母在字母表中的相對位置,當然到這裡還沒有結束,因為還要加上9才是所要求的時間!

細節4:「後面兩字串第1對相同的英文本母』s』」

注意到是第1對相同的字元,條件是英文本母,那麼大小寫也要考慮在內!

細節5:「出現在第4個位置(從0開始計數)上,代表第4分鐘」

注意到這個位置不是字母在字母表中的位置!而是字元在字串中的位置!那麼你的下標必須從0開始,還有分鐘數小於10的前面要加0!

細節6:「輸入在4行中分別給出4個非空、不包含空格、且長度不超過60的字串」

輸入要求不必說,但是要注意到長度不超過60,所以你不需要考慮分鐘數超過60的情況。

分析完上述細節,一般你能做對至少70%了,剩下不到30%是判定前兩字串的方法是否正確。判定前兩字串需要判定兩次,而且第2次判定要建立在第1次判定位置的基礎上往後判定,一般可以用乙個標誌變數flag,假設flag初始化為false,那麼第1次處理完後將flag置為true,作為第2次判定的條件,第2次判定完後,退出迴圈。但是你要注意這兩次判定分支的相對次序,第2次判定分支要放在第1次判定分支的前面!否則第1次判定並處理完後,第2次判定分支執行,也就是在同乙個位置上進行兩次操作,顯然是錯誤的。

**:

#include

intmain()

;int i,j,sax=0;

for(i=

0;i<

60;i++)}

if(a[i]

==b[i]

&&sax==1)

else

if(a[i]

<=

'n'&&a[i]

>=

'a')}}

for(i=

0;i<

60;i++

)else

break;}

}return0;

}

1014 福爾摩斯的約會(20 分)

1014 福爾摩斯的約會 20 分 大偵探福爾摩斯接到一張奇怪的字條 我們約會吧!3485djdkxh4hhge 2984akdfkkkkggedsb s hgsfdk d hyscvnm。大偵探很快就明白了,字條上奇怪的亂碼實際上就是約會的時間星期四 14 04,因為前面兩字串中第 1 對相同的大...

1014 福爾摩斯的約會(20 分)

include using namespace std int main int flag 0 cin a b c d for int i 0 i a a i g flag cout a a i n flag if isdigit a i printf 02d a i 0 else cout 101...

1014 福爾摩斯的約會(20 分)

1014 福爾摩斯的約會 20 分 大偵探福爾摩斯接到一張奇怪的字條 我們約會吧!3485djdkxh4hhge 2984akdfkkkkggedsb s hgsfdk d hyscvnm。大偵探很快就明白了,字條上奇怪的亂碼實際上就是約會的時間星期四 14 04,因為前面兩字串中第 1 對相同的大...