PAT乙級1014(C語言)

2021-10-21 12:16:07 字數 2165 閱讀 5385

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

輸出樣例:

1.遍歷第一對字串的每乙個字元,當遇到符合條件的大寫字母時,break退出迴圈

2.代表星期的字元,其在字母表中是第幾位,對應week的下標

3.接著第乙個while迴圈遍歷第一對字串,符合條件時break退出

4.代表小時的字元,判斷它是數字還是字母,計算對應的hour

5.同上找到代表分鐘的字元,它在字串中位置即為對應的minute

(**改了好幾遍,有點凌亂,見諒)

#include

#include

intmain()

i++;}

i++;char week[7]

[4]=

;printf

("%s "

, week[day-

'a']);

while

(i<

strlen

(a1)

&&i<

strlen

(a2)

)else

if(a1[i]

>=

'0'&&a1[i]

<=

'9')

} i++;}

printf

("%02d:"

, hour)

;int j=0;

while

(j<

strlen

(a3)

&&j<

strlen

(a4)

) j++;}

printf

("%02d"

, minute)

;return0;

}

1.處理day時,必須篩選在a-g(7個字母)之間,否則會答案錯誤。估計是,如果出現了在a-g之外的相同大寫字母,也會成功被篩選,並賦值給day。hour和minute也是同理。

2.記得及時break,否則第一次迴圈會進入if()兩次,覆蓋掉day,並且minute得到錯誤值。第乙個迴圈中的break是必須的。

3.關於整數前置零,即2輸出為002,使用%03d就好了,0表示前置零,3表示一共3位

4.關於字元陣列的大小,一定要記得考慮『\0』,即字元陣列的大小至少為字串字元數+1

再說點自己的感受吧

5.我在該程式中使用過strcpy(a,b),由於當時設定a時未考慮』\0』,導致了執行時錯誤(檢查老半天了)。以後盡量使用strncpy()吧。

6.執行超時請檢查是否有死迴圈,執行時錯誤考慮是否出現陣列越界(另外,多除錯,比自己一行行檢查**快得多)

7.另外,自己現在的**很多是參考別人的ac**。自己之前有一些想法應該也是對的,比如,if(strlen(a1)<=strlen(a2)) min_len1=strlen(a1);再i=『a』&&a3[j]<=『z』)||(a3[j]>=『a』&&a3[j]<='z』這種**在c中有庫函式,isalpha(),記得使用

PAT 乙等 1014 C語言

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

1014 C語言的文法

程式 外部宣告 程式 外部宣告 外部宣告 函式定義 宣告 函式定義 函式型別 說明符 復合語句 函式型別 void char int float 說明符 指標 直接說明符 直接說明符 指標 指標 直接說明符 識別符號 直接說明符 直接說明符 常量表示式 識別符號 引數序列 識別符號 直接說明符,識別...

PAT乙級 1014 福爾摩斯的約會 C語言

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