信息解码(Message Decoding,ACM/ICPC World Finals 1991, UVa213)

这个题目吧,我怎么都理解不了。可能是对getchar()的不熟悉。但是,我也补习了相关的知识,还是有点模糊。总而言之,先把代码敲下来。

BTW,已经三天没去健身房了,怕是要被教练打了。敲完这个我就去!

#include <stdio.h>
#include <string.h>
//我在下面找不到十进制转化为二进制的过程
int code[8][1<<8];

int readchar(){
	for(;;){
		int ch = getchar();
		if(ch != '\n' && ch != '\r')
			return ch;
	}
}

int readint(int c){
	int v = 0;
	while(c--){
		v = v * 2 + readchar() - '0';
	}
	return v;
}

int readcodes(){
	memset(code,0,sizeof(code));
	code[1][0] = readchar();
	for(int len = 2; len <= 7; len++){
		for(int i = 0; i < (1<<len) - 1; i++){
			int ch = getchar();
			if(ch == EOF)       
				return 0;
			if(ch == '\n' || ch == '\r')    //这个估计是为了,跳行读取
				return 1;
			code[len][i] = ch;         //这里的ch是十进制的
		}
	}
	return 1;
} 



int main(){
	while(readcodes()){
		for(;;){
			int len = readint(3);
			if(len == 0)          //搞不懂这里跳出的理由是什么
				break;
			for(;;){
				int v = readint(len);
				if(v == (1 << len) - 1)        //这里跳出的理由是?
					break;
				putchar(code[len][v]);
			}
		}
		putchar('\n');
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/JustinAndy/article/details/79607118