版权声明: https://blog.csdn.net/a673953508/article/details/81076065
题解:
这道题目的精华点就是一开始字符跟二进制配对的方法。
书本上采用了二维数组来解决,第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;
}