UVa-213-信息解码

这题的话,我们只要理解题意,应该就不算很难。
我们可以开一个二维数组,用来存放对应的编码字符,第一个下表是length,第二个下标是value,这样一来,我们在读入数据的时候就进行处理,然后想要使用的时候就可以直接找到。
读完编码头之后,我们就不停地读入每一个小节,直到出现000。读小节的时候,我们不停地读入对应len的整数,然后输出该编码字符,如果值为全一,则该小节结束。
putchar这个函数还挺好用的,还有读入的时候,因为不允许全一,所以就读入到(1<<len)-1以内就可以了。

#include <stdio.h>
#include <string.h>

int readchar()
{
	for (;;) {
		char 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;
}

char code[8][1<<8];
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++) {
			char ch=getchar();
			if (ch==EOF) return 0;
			if (ch=='\n'||ch=='\r') return 1;
			code[len][i]=ch;
		}
	}
	return 1;
}

int main()
{
	while (readcodes()) {
		for (;;) {
			int len=readint(3);
			if (len==0) break;
			for (;;) {
				int value=readint(len);
				if (value==(1<<len)-1) break;
				putchar(code[len][value]);
			}
		}
		putchar('\n');
	}
	return 0;
}
//for (int len=2;len<=7;len++) {
//	for (int i=0;i<(1<<len)-1;i++)
//		putchar(code[len][i]);
//	putchar('\n');
//}

猜你喜欢

转载自blog.csdn.net/qq_41090676/article/details/86543726
213