算法竞赛入门经典(第二版) 例题4-4 信息编码(Message Decoding) UVa213 Finals1991 (二进制)
来源:互联网 发布:吉永小百合 长相 知乎 编辑:程序博客网 时间:2024/06/01 08:01
Page 83
题目描述:
UVa题目链接
题目分析:
①这道题主要考察二进制的东西,有了二进制,我们就不必以字符串的形式保存这一大串编码了,我们只需要把编码理解成二进制,用(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];
}
========================================================================
参考代码:
//信息编码//2014.7.8#include<iostream>#include<string>using namespace std;int code[8][1 << 8];//由于编码文本可以多行int readchar(){ for( ; ; ) { int ch = getchar(); //cin.get(ch); if(ch != '\n' && ch != '\r') return ch; }}//二进制转为十进制int readint(int c) //将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 = 1; len <= 7; len++) { for(int i = 0; i < (1 << len) - 1; i++) //不能全为1,也就是说以全为1结束 { //int ch; //cin.get(ch); int ch = getchar(); if(ch == EOF) //EOF指的是文件结束符 return 0; if(ch == '\n' || ch == '\r') //\n指换行符 在windows下,以文本方式写入文件的\n会被转换为\r\n(也就是0x0D0A),而在读入的时候,\r\n会被转换回\n return 1; code[len][i] = ch; } } return 1;}int main(){ while(readcodes()) //无法读取更多的编码头时退出 { for( ; ; ) { int len = readint(3); //每一小节的前3个数字表示小节中每个编码的长度 if(len == 0) break; for( ; ; ) { int v = readint(len); if(v == (1 << len) - 1) //每个字符的编码以全1结束 break; putchar(code[len][v]); //类似于查表的过程 } } putchar('\n'); } return 0;}
调试易犯错误的地方:
以前我们知道C++少用getchar 这里可不可以用cin.get(ch),调试中证明是不可以的,因为我们这里ch定义的时候是整型,现在舒瑞虎用getchar返回的就是ASCII码了。
1 0
- 算法竞赛入门经典(第二版) 例题4-4 信息编码(Message Decoding) UVa213 Finals1991 (二进制)
- 算法竞赛入门经典 UVa213 Message Decoding
- UVA213 Message Decoding(二进制)
- ☆算法竞赛入门经典(第二版) 例题4-2 猜单词(Hangman Judge) UVa489
- 算法竞赛入门经典(第二版) 刘汝佳-第八章 高效算法设计 例题(13/19)
- 算法竞赛入门经典 第二版 例题11-4 电话圈 Calling Circles uva247
- 算法竞赛入门经典(第二版)-刘汝佳-第五章 C++与STL 例题(9/12)
- 算法竞赛入门经典(第二版)-刘汝佳-第六章 数据结构基础 例题(17/22)
- 算法竞赛入门经典(第二版)-刘汝佳-第七章 暴力求解法 例题(6/15)
- 算法竞赛入门经典(第二版)-刘汝佳-第九章 动态规划初步 例题(11/31)
- 算法竞赛入门经典(第二版)紫书-题目集合【例题+习题】
- 算法竞赛入门经典 例题 9-4
- 算法竞赛入门经典java版程序ch4 UVa213
- 例题 4-4 信息解码 (Message Decoding) UVa 213
- 算法之路二:刘汝佳算法竞赛入门经典 信息解码 UVA213
- 算法竞赛入门经典(第二版)-刘汝佳-第三章 数组与字符串 例题+习题(17/18)
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 例题+习题(15/16)
- UVA213 - Message Decoding
- [Cocoa]_[获取系统时间]
- 生活随笔:技术转型
- 题目:删除排序链表中的重复数字 II
- 题目:删除数字
- WebMVC中EasyUI的ComboBox控件的运用
- 算法竞赛入门经典(第二版) 例题4-4 信息编码(Message Decoding) UVa213 Finals1991 (二进制)
- CSS做一个小黄人
- linux C sqlite3 mysql
- 题目:前序遍历和中序遍历树构造二叉树
- 多线程渲染(Multithreaded- rendering)3D引擎实例分析 : FlagshipEngine
- C#编码标准和命名规范
- JS的基础类型与引用类型
- 精彩依旧——2015年总结上
- 设计模式之迭代器模式