切換
舊版
前往
大廳
主題

ZeroJudge - e269: 11220 - Decoding the message 解題心得

Not In My Back Yard | 2019-10-25 22:29:20 | 巴幣 0 | 人氣 498

題目連結:


題目大意:
給定一正整數 T (1 ≦ T ≦ 30),代表有 T 筆測試資料。每筆測試資料前有一空白列,接著得若干列才是測試資料的內容。每列的輸入是一個句子,句子由好幾個以空白隔開的單詞組成,每個單詞又各自是由大小寫的英文字母所組成。

每個句子隱藏著一段訊息,其解碼方式為:取第一個詞的第一個字母、第二個詞的第二個字母、……、第 i 個詞的第 i 個字母。但如果第 i 個詞不滿 i 個字母,則改成取第 i + 1 個詞的第 i 個字母(如果第 i + 1 個詞也不滿 i 個,則繼續順延直到滿足或是句子結束)。

對於每個句子,請輸出其隱藏訊息(一個句子輸出一列)。輸出格式請參見範例輸出。



範例輸入:
2

Hey good lawyer
as I previously previewed
yam does a soup

First I give money to Teresa
after I inform dad of
your horrible soup


範例輸出:
Case #1:
How
are
you

Case #2:
Fine
and
you


解題思維:
雖然 C++ 可以使用 getchar() 一個字元一個字元讀取。但是也可以使用 getline() 讀取一整列字串(直到碰到換行字元或 EOF (檔案結束))。

分別每個測試資料的依據就是讀到空白列或是 EOF 為止(但是給定數字 T 後面的空白列不計)。

接著就是用 getline() 讀取一整列的輸入字串,放到 stringstream 的字串串流後變成一個詞一個詞,就用題目的解碼方式解碼。即用一個計數的變數 N。如果讀到的詞不滿 N 個字母就順延,且 N 不加 1 ;反之,輸出第 N 個字母的內容,並將 N 加一。

然後每個句子處理完後換行。(記得測試資料的一開頭要先輸出這是第幾個 Case )

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作