Message Decoding密码翻译
這是一道模擬題ex
其實每一道模擬題都很“簡單”,
這道題就是難在讀英文題!處理輸入!
真的我竟然花了幾個小時就只是為了看懂樣例!!orz
題目大意
考慮下面的01串序列:
0,00,01,10,000,001,010,011,100,101,110,0000,0001,···,1101,1110,00000,···
首先是長度為1的串,然后是長度為2的串,依此類推。
如果看成二進制,相同長度的后一個串等于前一個串加1。注意上述序列中不存在全為1的串。
你的任務是編寫一個解碼程序。
輸入格式:
可能有多組數據,對于每組數據,首先輸入一個編碼頭(保證只有一行),則上述序列的每個串依次對應編碼頭的每一個字符。接下來是編碼文本(可能有多行組成,你應當把它們拼成一個長長的01串)。編碼文本由多個小節組成,每個小節的前三個數字代表小節中每個編碼的長度(用二進制表示),然后是各個字符的編碼,以全1結束(例如,編碼長度為2的小節以11結束)。編碼文本以編碼長度為000的小節結束。
輸出格式:對于每組數據,輸出其編碼文本解碼后的結果。
樣例輸入輸出
Sample input
TNM AEIOU
0010101100011
1010001001110110011
11000
$#**
0100000101101100011100101000
Sample output
TAN ME
##*$
樣例解釋
我就只解釋第二個吧!
首先讀入編碼頭$#**\
| # | 00 |
| * | 01 |
| * | 10 |
| \ | 000 |
接著讀入前三個01字符,010意味著后面的編碼長度為2,
接著連續讀入00,找到#,
讀入00,找到#,
再讀入10找到*
最后讀入11表示結束
然后讀入前三個01字符,011意味著后面的編碼長度為3
先讀入000,找到\
又讀入111,結束
其次讀入前三個01字符,001意味著后面的編碼長度為1
先讀入0,找到$
又讀入1,結束
最后讀入000,代表這個樣例結束!
題解
首先通過翻譯我們能get到些什么玩意?
1.這個編碼頭只有一行,所以不用考慮斷行存儲的麻煩,但是空格等其它鬼玩意兒都要存!
2.三個01表示長度len,即連續讀入len個01字符再去get編碼頭,知道遇到連續len個全是1結束
3.全文(這一個數據)用000結束
4.多行編碼文本,我們要進行粘貼,去掉換行
其次因為讀取三個01字符表示len,最大就是111(十進制:7)
這說明了每個編碼頭的對應密文最大就是1111110,七位,
我們就可以開char數組進行儲存
接著len長度有幾個密文呢?
思考一下有i位01,每一位都有0/1兩種選擇,那么就一共有1<<i種,排除掉全是1的情況
也就是2i-1個
接著就只有你的代碼實現問題了。。。
代碼實現
注意處理一下:
由于輸入下一個編碼頭之前,要敲一個\n,
所以最后我們先讀入一下\n,再調用函數讀取編碼頭
又到了say goodbye的時間了,好舍不得 ,我們下期再見!!
總結
以上是生活随笔為你收集整理的Message Decoding密码翻译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 360重装系统在哪里360如何重装电脑系
- 下一篇: 学习三分 (概念 + 模板 + 例题:曲