对于lrj的想法,真是太清晰。自己真的是很难去做到。贴此代码,加以练习,加以感悟。
1 #include<cstdio> 2 #include<cstring> 3 4 int code[8][1<<8]; 5 6 int readchar() //避免换行带来的影响 7 { 8 for(;;) { 9 int ch = getchar(); 10 if(ch != '\n' && ch != '\r') return ch; 11 } 12 } 13 14 int readint(int c) //读取二进制 15 { 16 int v = 0; 17 while(c--){ 18 v = v*2 + readchar() - '0'; 19 } 20 return v; 21 } 22 23 int readcodes() 24 { 25 memset(code,0,sizeof(code)); 26 code[1][0] = readchar(); 27 for(int len = 2;len <= 7; len++) { 28 for(int i = 0;i < (1<<len)-1; i++) { //注意二进制 29 int ch = getchar(); 30 if(ch == EOF) return 0; 31 if(ch == '\n' || ch == '\r') return 1; 32 code[len][i] = ch; 33 } 34 } 35 return 1; 36 } 37 38 int main() 39 { 40 // freopen("in.txt","r",stdin); 41 while(readcodes()) { 42 for(;;) { //for循环太精妙 43 int len = readint(3); //精妙的寻找编码 44 if(len == 0) 45 break; 46 for(;;) { 47 int v = readint(len); 48 if(v == (1<<len)-1) break; 49 putchar(code[len][v]); 50 } 51 } 52 putchar('\n'); 53 } 54 return 0; 55 }