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的串。
你的任務(wù)是編寫一個解碼程序。
輸入格式:
可能有多組數(shù)據(jù),對于每組數(shù)據(jù),首先輸入一個編碼頭(保證只有一行),則上述序列的每個串依次對應(yīng)編碼頭的每一個字符。接下來是編碼文本(可能有多行組成,你應(yīng)當(dāng)把它們拼成一個長長的01串)。編碼文本由多個小節(jié)組成,每個小節(jié)的前三個數(shù)字代表小節(jié)中每個編碼的長度(用二進制表示),然后是各個字符的編碼,以全1結(jié)束(例如,編碼長度為2的小節(jié)以11結(jié)束)。編碼文本以編碼長度為000的小節(jié)結(jié)束。
輸出格式:對于每組數(shù)據(jù),輸出其編碼文本解碼后的結(jié)果。
樣例輸入輸出
Sample input
TNM AEIOU
0010101100011
1010001001110110011
11000
$#**
0100000101101100011100101000
Sample output
TAN ME
##*$
樣例解釋
我就只解釋第二個吧!
首先讀入編碼頭$#**\
| # | 00 |
| * | 01 |
| * | 10 |
| \ | 000 |
接著讀入前三個01字符,010意味著后面的編碼長度為2,
接著連續(xù)讀入00,找到#,
讀入00,找到#,
再讀入10找到*
最后讀入11表示結(jié)束
然后讀入前三個01字符,011意味著后面的編碼長度為3
先讀入000,找到\
又讀入111,結(jié)束
其次讀入前三個01字符,001意味著后面的編碼長度為1
先讀入0,找到$
又讀入1,結(jié)束
最后讀入000,代表這個樣例結(jié)束!
題解
首先通過翻譯我們能get到些什么玩意?
1.這個編碼頭只有一行,所以不用考慮斷行存儲的麻煩,但是空格等其它鬼玩意兒都要存!
2.三個01表示長度len,即連續(xù)讀入len個01字符再去get編碼頭,知道遇到連續(xù)len個全是1結(jié)束
3.全文(這一個數(shù)據(jù))用000結(jié)束
4.多行編碼文本,我們要進行粘貼,去掉換行
其次因為讀取三個01字符表示len,最大就是111(十進制:7)
這說明了每個編碼頭的對應(yīng)密文最大就是1111110,七位,
我們就可以開char數(shù)組進行儲存
接著len長度有幾個密文呢?
思考一下有i位01,每一位都有0/1兩種選擇,那么就一共有1<<i種,排除掉全是1的情況
也就是2i-1個
接著就只有你的代碼實現(xiàn)問題了。。。
代碼實現(xiàn)
注意處理一下:
由于輸入下一個編碼頭之前,要敲一個\n,
所以最后我們先讀入一下\n,再調(diào)用函數(shù)讀取編碼頭
又到了say goodbye的時間了,好舍不得 ,我們下期再見!!
總結(jié)
以上是生活随笔為你收集整理的Message Decoding密码翻译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 360重装系统在哪里360如何重装电脑系
- 下一篇: 电脑连接线怎么选电脑怎样连接线