UVA 213 資訊解碼(二進位制 位運算)

2022-08-17 02:24:18 字數 1329 閱讀 1467

出自劉汝佳演算法競賽入門經典第四章。

考慮下面的01串串行:

0, 00, 01, 10, 000, 001, 010, 011, 100, 101, 110, 0000, 0001, …, 1101, 1110, 00000, … 首先是長度為1的串,然後是長度為2的串,依此類推。如果看成二進位制,相同長度的後 乙個串等於前乙個串加1。注意上述序列中不存在全為1的串。 你的任務是編寫乙個解碼程式。首先輸入乙個編碼頭(例如ab#tancnrtxc),則上述 序列的每個串依次對應編碼頭的每個字元。例如,0對應a,00對應b,01對應#,…,110對 應x,0000對應c。接下來是編碼文字(可能由多行組成,你應當把它們拼成乙個長長的01 串)。編碼文字由多個小節組成,每個小節的前3個數字代表小節中每個編碼的長度(用二 進製表示,例如010代表長度為2),然後是各個字元的編碼,以全1結束(例如,編碼長度 為2的小節以11結束)。編碼文字以編碼長度為000的小節結束。 例如,編碼頭為$#**\,編碼文字為0100000101101100011100101000,應這樣解碼: 010(編碼長度為2)00(#)00(#)10(*)11(小節結束)011(編碼長度為3)000(\)111(小節結束)001(編碼 長度為1)0($)1(小節結束)000(編碼結束)。

以後可以用乙個函式去處理有換行的讀入。

1

intread()

210 }

可以用這個函式去處理二進位制轉換十進位制

1

int btod(int

len)28

return

v;9 }

然後注意讀入完的**轉換就行 1<

最後放上**#include

using

namespace

std;

char input[1

<<10

];char code[8][1

<<8

];int

codelen;

intread()

}int btod(int

len)

returnv;}

inttrans()

else

}return

len;

}void

printtest()

}}int

main()

printf("%c

", code[len][b]);}}

printf("\n

");getchar();

// 注意這個getchar 是吸收最後乙個回車符用的 以後使用getchar()都要注意有沒有回車符沒被吸收}}

UVa213 資訊解碼

對於下面這個字串 0,00,01,10,000,001,010,011 首先是長度為1的串,然後是長度為2的串,以此類推。不存在全為1的串。你的任務是編寫乙個程式。首先輸入乙個 頭 例如ab tancnrtxc 則上述序列的每個串依次對應編碼頭的每個字元。例如,0對應a,00對應b,01對應 000...

UVa 213 資訊解碼

這題的話,我們只要理解題意,應該就不算很難。我們可以開乙個二維陣列,用來存放對應的編碼字元,第乙個下表是length,第二個下標是value,這樣一來,我們在讀入資料的時候就進行處理,然後想要使用的時候就可以直接找到。讀完編碼頭之後,我們就不停地讀入每乙個小節,直到出現000。讀小節的時候,我們不停...

資訊解碼 uva213

對於下面這個字串 0,00,01,10,000,001,010,011 首先是長度為1的串,然後是長度為2的串,以此類推。不存在全為1的串。你的任務是編寫乙個程式。首先輸入乙個 頭 例如ab tancnrtxc 則上述序列的每個串依次對應編碼頭的每個字元。例如,0對應a,00對應b,01對應 000...