World Finals >> 1991 - San Antonio
问题链接:UVA213 UVALive5152 Message Decoding。
问题简述:参见问题链接。
问题分析:(略)。
程序中,若干功能封装到函数中,使得程序逻辑变得简洁。
AC的C语言程序如下:
/* UVA213 UVALive5152 Message Decoding */
#include <stdio.h>
#include <memory.h>
#define CODE_LEN 7
int code[CODE_LEN+1][1<<(CODE_LEN+1)];
int readchar()
{
int c;
while((c=getchar()) && (c == '\n' || c == '\r'));
return c;
}
int readcodes()
{
int i, j;
char c;
memset(code, 0, sizeof(code));
code[1][0] = readchar();
for(i=2; i<=CODE_LEN; i++) {
int len = (1<<i)-1;
for(j=0; j<len; j++) {
if((c = getchar()) == EOF)
return 0;
else if(c == '\n' || c == '\r')
return 1;
code[i][j] = c;
}
}
return 1;
}
int readint(int len)
{
int v = 0;
while(len--)
v = v * 2 + readchar() - '0';
return v;
}
int main(void)
{
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;
}