题目:https://vjudge.net/problem/UVA-213

思路:


1.(len,value)二元组,len为二进制位数,value为第value+1个len位二进制,code[len][value]为其对应的字母

len最大为7,value最大为1<<8-1

如:对于

TNM AEIOU

code[1][0]=T     code[2][0]=N       code[2][1]=M       code[2][2]=空格

依次类推

2.编码头在一行,但是输入的编码文本却可能是由多行组成的,且中间可能有任意个空格换行之类的,要注意读取技巧,边输入边读

ac代码:


《算法竞赛入门经典》紫书代码

#include <iostream>
#include <cmath>
#include <string.h>
#include <ctype.h>
#include <algorithm>
#include <stdlib.h>
#define maxn 100
#define inf 1e+9+10
using namespace std;
typedef long long ll;
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()
{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)//说明后面都是0,未存入数据return ;printf("code[%d][%d]=%c\n",len,i,code[len][i]);}}
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);while(readcodes()){//printcodes();for(; ;){int len=readint(3);if(len==0)//000时break;//printf("len=%d\n",len);for( ; ;){int v=readint(len);//printf("v=%d\n",v);if(v==(1<<len)-1)//len位都为1时break;putchar(code[len][v]);}}printf("\n");}return 0;
}

网上参考大神的代码:

#include <iostream>
#include <cmath>
#include <string.h>
#include <ctype.h>
#include <algorithm>
#include <stdlib.h>
#define maxn 100
#define inf 1e+9+10
using namespace std;
typedef long long ll;
char code[8][1<<8];
string s;
char ch;
int len,val,l,i,j,a,b,c;
void print()
{while(1){int val = 0;for (i = 0; i < len; i++) {do {scanf("%c", &ch);} while (!isdigit(ch));val = val * 2 + (ch - '0');}if (val == ((1 << len) - 1))//全1return;elseputchar(code[len][val]);}
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);while(getline(cin,s)){if(!s[0])//不是很懂这句话,不加的话会pecontinue;len=1,val=0,l=s.length();memset(code,0,sizeof(code));for(i=0;i<l;i++){code[len][val++]=s[i];if(val==((1<<len)-1)){len++;val = 0;}}/*for(i=1;i<=len;i++)for(j=0;j<((1<<i)-1);j++){if(code[i][j]!=0){cout << i << ' ' << j << ' ';putchar(code[i][j]);cout << endl;}}输出code[][]*/while(scanf("%1d%1d%1d",&a,&b,&c)){len=a*4+b*2+c;if(len==0){printf("\n");break;}print();}}return 0;
}

【UVA213】Message Decoding(读入技巧+二进制十进制转换)相关推荐

  1. 初中计算机教案十进制转二进制,高中信息技术二进制十进制转换教案

    二进制十进制转换教案[教学目的与要求]1.熟悉数制的概念:2.掌握位权表示法:3.熟练掌握各数制之间的转换方法.[课时安排]1课时.[教学重点与难点]1.难点:位权表示法十进制转化为二进制2.重点:二 ...

  2. Python中二进制十进制转换

    hello大家好,今天我想和大家分享一下在Python中进制转换加减法的方法. 比如现在我们需要求100 + 10,然后需要将结果110以二进制的形式返回,又或者我们现在有一个小需求,就是要计算二进制 ...

  3. 算法竞赛入门经典(第二版) | 例题4-4 信息解码 (紫皮书牛啤!)(UVa213,Message Decoding)

    大意: 二进制编码中取前三位,得到编码长度为n(0<=n<=7), 按此长度重复截取编码中剩余部分(n位一截),直到读取n个1结束.再次取三位,长度为n,重复上述操作-直至n个1后接000 ...

  4. 怎样用计算机二进制,二进制计算_如何用系统自带的计算器二进制十进制转换...

    系统自带的计算器是不支持小数位转换的.角度是DEG,弧度是RAD,梯度是GRA,转换模式的方法是按MODE,然后按相应的键.二进制,八进制,十六进制和十进制一样是进位制式.四字.双字.单字.字节是数据 ...

  5. 二进制十进制转换史上最牛逼算法!!

    十进制转二进制 相信学过计算机的同学一定对二进制不陌生,计算机底层的通讯就是二进制嘛!二进制由0和1组成,那么怎么快速的对一个十进制数转换成二进制数呢? 最古老的方法大家还记得怎么转换吗?比如35这个 ...

  6. UVa213 - Message Decoding

    题意:给出一个字符串及其编码序列,解码得到原始序列.编码序列是用的二进制.形式如0,00,01,10.也就是根据二进制的位数及其所能表示的二进制,注意全1的不包含在内.0对应字符串的第一个字符,00对 ...

  7. 关于计算机的进制之间的转换 二进制转换十进制 十进制转换二进制

    最近在学习计算机基础 研究到进制转换,颇有心得,在此做个解释和记录: 首先介绍       二进制转换十进制 二进制数第0位的权值是2的0次方,第1位的权值是2的1次方-- 所以,设有一个二进制数:1 ...

  8. python实现十进制转换成十六以内任意进制

    十进制转换成二进制 十进制转换成二进制,采用的是"除以2求余数"的计算方法,如下所示: "除以2"的过程,得到的余数是从低到高的次序,而需要的带的输出是从高位到 ...

  9. 十进制转换成十六进制c语言 链栈,C语言 链栈 实现十进制转换二进制,八进制,十六进制...

    C语言 链栈 实现十进制转换二进制,八进制,十六进制 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 最后运行结果:代码:#incl ...

  10. C语言十进制转换成二进制源码

    把开发过程比较重要的一些内容备份一次,下边资料是关于C语言十进制转换成二进制的内容,应该对各位朋友有一些用. #include int main() { int num; std::cout < ...

最新文章

  1. 中国各地高考难度地图:上大学最难的省份是哪里!?
  2. 不是报错就是崩盘,这些代码迁移问题你遇到过几个?
  3. 彼之蜜糖,吾之砒霜——聊聊软件开发中的最佳实践
  4. Hibernate criteria 增加排序项
  5. R语言应用实战-基于R的因子分析(以上市公司数据为例)
  6. 剑指offer: 不用加减乘除做加法
  7. SAP CRM webclient ui help link超链接的生成逻辑
  8. xcode常用快捷键_Mac及Xcode常用快捷键
  9. ajax_典型应用_添加商品标题
  10. eclipse php链接mysql_eclipse怎么连接mysql
  11. Zabbix故障但是没有错误日志输出的一种解决办法
  12. div设置背景半透明
  13. 实用网站、软件、App分享
  14. fluent二维叶型仿真_FLUENT太阳能热水器仿真
  15. MessagingTimeout: Timed out waiting for a reply to message ID
  16. Unity获取系统信息SystemInfo(CPU、显卡、操作系统等信息)
  17. 磁致伸缩位移传感器的特点及工作原理
  18. 课题组王猛的论文被遥感领域顶级期刊 IEEE TGRS 录用
  19. fib(OSC招聘-小而美的公司推荐){fib(0x5-1) + fib(0x5-2)}
  20. 网络原理实验4 路由协议的配置

热门文章

  1. WSS 3.0与MOSS 2007重要更新
  2. matlab如何持续存贮多维矩阵,matlab多维矩阵在内存中存储顺序
  3. 华为主题锁屏壁纸换不掉_华为手机中的这些默认设置一定要改,不然会导致手机卡顿加快耗电...
  4. arm平台下的反汇编pdf_stm32逆向与安全科普,bin文件逆向反汇编
  5. 用简单 JS 实现代替 MYBATIS LOG PLUGIN 的功能
  6. 计算机培训实践反思模板,基于问题解决式课堂教学模式的反思
  7. 通过数据,从键盘录入学生考试科目数,然后依次录入学的每一科分数.使用数组存储学生分数.然后输出总分,平均分,简单易理解
  8. python管道怎么使用_如何在多个流程中正确使用管道(2)
  9. 脚本录制软件python 按键精灵 tc_GitHub - yang-dongxu/KeymouseGo: 类似按键精灵的鼠标键盘录制和自动化操作...
  10. react组件卸载调用的方法_React组件如何还能跑得再快一点