uva_213_Message Deocding

来源:互联网 发布:knife party知乎 编辑:程序博客网 时间:2024/05/22 06:55

刘汝佳的解法思路:
定义一个8行258(1<<8)列的全局整形数组,用于存放原始的密码。
方法:编写一个函数,用getchar()将读到字符以整形的形式储存到数组中
然后编写一个函数读长度,根据这个输出数组中的值

代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.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(){    int len;    int i;    memset(code,0,sizeof(code));    code[1][0]=readchar();    for(len=2;len<=7;len++){        for(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;        }    }    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;}
0 0