紫书——Message Decoding UVA - 213

版权声明: 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;
}

猜你喜欢

转载自blog.csdn.net/a673953508/article/details/81076065