紫書——Message Decoding UVA - 213
阿新 • • 發佈:2018-11-09
題解:
這道題目的精華點就是一開始字元跟二進位制配對的方法。
書本上採用了二維陣列來解決,第1個可以有1個,第2個可以有3個,如此類推,然後之後的就是考你細心程度了,注意getchar和回車的判斷。
書上的程式碼大致如下:
#include <iostream> using namespace std; bool readcode(); int readint(int n); char readchar(); char a[8][1<<8]; int main(){ while(readcode()){ int fnum; while((fnum = readint(3)) != 0){ int znum = 0; while((znum = readint(fnum)) != ((1<<fnum)-1)){ cout << a[fnum][znum]; } } cout << endl; getchar(); } return 0; } int readint(int n){ int num = 0; for(int i = 0; i < n; i++){ num = num*2 + readchar()-'0'; } return num; } char readchar(){ char ch; for(;;){ ch = getchar(); if(ch != '\n') return ch; } } //記得在最後接收回車 bool readcode(){ char ch; ch = getchar(); if(ch == EOF) return 0; a[1][0] = ch; for(int i = 2; i < 8; i++){ for(int j = 0; j < (1<<i)-1; j++){ ch = getchar(); if(ch == '\n') return true; a[i][j] = ch; } } return true; }