1. 程式人生 > >紫書——Message Decoding UVA - 213

紫書——Message Decoding UVA - 213

題解:

這道題目的精華點就是一開始字元跟二進位制配對的方法。

書本上採用了二維陣列來解決,第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;
}