UVa 213 Message Decoding (信息編碼)
阿新 • • 發佈:2018-03-22
== cout HA etc 換行符的處理 ostream flag 回歸 Coding
該題目作為放假回歸正軌的第一道正式做的題目,被卡了好久,唉,怪我有顆太浪的心
解題思路:
1、把編碼頭用二維字符數組存儲起來,a[x][y]存儲對應的字符,x表示編碼的長度,y表示編碼的大小,
存儲時註意y<2^x - 1的
2、由於編碼文本可能是由多行組成,所以需要判斷和跳過對換行符的處理,為方便處理,將編碼文本視作字符處理
#include<iostream> #include<CString> #include<cmath> #include<stdlib.h> using namespace std; char a[8][64];int get(int x) {//算出長度為x的編碼的值 char a; int s = 0; while (a = getchar()) { if (a != ‘\n‘ && a != ‘\r‘) { x--; s += (int)(pow(2, x) * (a - ‘0‘)); if (x == 0) break; } } return s; } int main() { memset(a, 0, sizeof(a)); for (int i = 1; i < 8; i++) {//將編碼頭存儲到二維字符數組中 int flags = 0; for (int j = 0; j < pow(2, i) - 1; j++) { char b = getchar(); if (b == ‘\n‘ || b == ‘\r‘) { flags = 1; break; }else a[i][j] = b; } if (flags == 1) break; } int L, S; while (true) { L = get(3);//小節中每個編碼的長度 if (L == 0) break;//000代表文本結束 while (true) {//對小節中的每個編碼進行解碼 S = get(L); if (S == pow(2, L) - 1) break; else cout << a[L][S]; } } cout << endl; system("pause"); }
UVa 213 Message Decoding (信息編碼)