UVa213 信息解码 例题4-4(P83)

题目地址


// uva 213 
// 2017.1.25 
#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;
}              //读入长度为len的二进制的字符串,同时返回对应十进制值 

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

//读入编码头,一串字符 
void printcodes() {
  for(int len = 1; len <= 7; len++)
    for(int i = 0; i < (1<<len)-1; i++) {
      if(code[len][i] == 0) return;
      printf("code[%d][%d] = %c\n", len, i, code[len][i]);
    }
}

int main() {
  while(readcodes()) {                    //读入编码头到code数组中。code【编码长度len】【此长度内对应的编码位置value】 
//printcodes();                        //显示其可以帮助理解! 
    for(;;) {
      int len = readint(3);             //读入前3个数,获取长度len 
      if(len == 0) break;
//printf("len=%d\n", len);
      for(;;) {
        int v = readint(len);            //继续读入长度为len的数,获取该编码的位置value 
//printf("v=%d\n", v);
        if(v == (1 << len)-1) break;
        putchar(code[len][v]);            //查code表并且输出 
      }
    }
    putchar('\n');
  }
  return 0;
}


/*
01串序列
二进制:0,00,01,10,000,001,010,011,100,101,110,0000,0001,……
len:    1, 2 , 2 , 2 , 3 , 3  , 3  , 3  , 3  , 3  , 3  , 4  , 4     …… 
value:  0,0 ,1 ,2 , 0 ,1  ,2  ,3  , 4  ,5  ,6  ,0  ,1     ……
例子    $  #   *   *   \ 
*/

Input:

$#**\
0100000101101100011100101000

Output:

##*\$
  • 注意
    题目分析:
    ①这道题主要考察二进制的东西,有了二进制,我们就不必以字符串的形式保存这一大串编码了,我们只需要把编码理解成二进制,用(len, value)这个二元数组来表示一个编码,其中len表示编码长度,value是编码对应的十进制值
    ②之后用codes[len][value]保存这个编码所对应的字符,这里需要需要注意我们是这里是单个字符输入的,而且我们编译头是独自一行的。我们这里为什么不考虑,getline因为我们需要每个字符输入和len有直接联系的,所以我们选择单个输入。
    ③处理比编码文本可以由多行组成这个问题,笔者编写了一个跨行编写读字符的代码
    ④进制转化问题了,二进制中8位最大的整数是2^8 - 1 用C写是(1 << 8)-1
    ⑤10进制转化为X进制
while(n != 0)
{
num[i] = n % x;
i++;
n = n/x;
}

X进制转为10进制

 for(int i = 0;i < length; i++)
 {
 ans = ans * X + num[i];
 }
  • 过程
  • 读入编码头到 表code[len][value]中
  • 读入三个二进制数获取长度
  • 向后继续读入,获取对应长度的对应第几位置
  • 查表code[len][value]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,743评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,608评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,646评论 18 139
  • 文/甜点 1 “我已经原谅了从前的自己,就像谅解了一个野心勃勃的傻逼,体恤了一个...
    思甜_根号2阅读 649评论 0 4
  • 一、 数组排序 Array.sort原理:首先,js中的sort会将排序的元素类型转化成字符串进行排序。不过它是一...
    Promise__阅读 3,380评论 0 1