信息解码

题目来源:https://vjudge.net/contest/239343#problem/D

代码:

#include<stdio.h>
#include<string.h>
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 code[8][1<<8];
int readcodes()
{int len,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; 
} 

 做题感悟:1.将编码理解为二进制;

                      2.用二元组(len,value)表示一个编码,len为编码长度,value为编码对应的十进制。

                      3.调用函数分别读取编码头和二进制字符。

                      4.逻辑要清晰,一步步写清思路再进行题解有助于今后的学习。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值