书中给出的算法有点浪费空间,可以使用循环队列进行改进,这样就不需要使用额外的空间,在原数组的基础上就可以完成解密,代码如下:

 #include <stdio.h>

 void decode(int a[], int size)
{
int head = , tail = size;//tail point to next position to be written while (head != tail){
//删除队首元素
printf("%2d ", a[head]);
head = (head + ) % size; //将新的队首元素添加到队尾
a[tail % size] = a[head];
tail = (tail + ) % size;//可以避免队列满时和队列空时状态相同的情况
//再将队首出队
head = (head + ) % size;
}
} int main(void)
{
int a[], size = , i; while (scanf("%d", &a[size]) != EOF){
++size;
} printf("size : %d\n", size); decode(a, size); return ;
}

代码中,head指向队首,而tail指向队尾的下一个位置,按照这种方式,如果执行删除操作后head==tail表示队列为空,如果执行插入操作后head==tail就表示队列满。按理说,tail在初始化时应该写成tail=0的,但是这样以开始判断就会导致while条件不成立,因此设置了tail=size,但这样做的代价就是讲新队首元素添加到队尾时下标总是要使用a[tail % size]。当然,我们也可以使用do-while结构来解决这个问题。

 void decode(int a[], int size)
{
int head = , tail = ;//tail point to next position to be written do {
//删除队首元素
printf("%2d ", a[head]);
head = (head + ) % size; //将新的队首元素添加到队尾
a[tail] = a[head];
tail = (tail + ) % size;//可以避免队列满时和队列空时状态相同的情况
//再将队首出队
head = (head + ) % size;
}while (head != tail);
}

啊哈!算法:解密QQ号的更多相关文章

  1. 【坐在马桶上看算法】算法4:队列——解密QQ号

            新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问QQ号,小哈当然不会直接告诉小哼啦,原因嘛你懂的.所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则. ...

  2. 算法5:队列——解密 QQ 号

    新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问 QQ 号,小哈当然不会直接告诉小哼啦,原因嘛你懂的.所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则.规则是这样的 ...

  3. 队列——解密QQ号

    队列——解密QQ号 --转自啊哈磊[坐在马桶上看算法]算法4:队列——解密QQ号 新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问QQ号,小哈当然不会直接告诉小哼啦,原因嘛你懂的 ...

  4. 队列解密QQ号

    队列解密QQ号 本篇博客主要是<啊哈!算法>的读书笔记,这里做一下记录. 问题场景: 给定一串 QQ 号,631758924,从其中解密出真实的 QQ 号. 解密规则:首先将第一个数删除, ...

  5. 啊哈算法之巧用队列解密QQ号

    简述 本算法摘选自啊哈磊所著的<啊哈!算法>第二章第一节的题目——使用队列来解密举例中按照规则加密的QQ号.文中代码使用C语言编写,博主通过阅读和理解,重新由Java代码实现了一遍,意在深 ...

  6. 解密QQ号

    啊哈~ ---------------------------------------------------------- http://bbs.ahalei.com/thread-4489-1-1 ...

  7. STL容器及算法题:删除奇数的QQ号

    最近思考到这样一个题目:在STL的set和vector容器里存储了1亿个QQ号,编写函数删除奇数QQ号. 1. STL容器简介 首先了解一下 set 和 vector 以及其他类似的 STL 容器: ...

  8. 全面解密QQ红包技术方案:架构、技术实现、移动端优化、创新玩法等

    本文来自腾讯QQ技术团队工程师许灵锋.周海发的技术分享. 一.引言 自 2015 年春节以来,QQ 春节红包经历了企业红包(2015 年).刷一刷红包(2016 年)和 AR 红包(2017 年)几个 ...

  9. 纪勇破解QQ号问题

    试题描述 来到了新学校,才相处不到一个月,jy就对oyjy一见钟情.于是向oyjy问QQ号.当然身为创(实)新(验)一班的同学,oyjy还是要考考jy.她给了纪勇一个加密后的QQ号,让纪勇解密,解密规 ...

随机推荐

  1. cocos2d-x 判断点击命中坐标的几种方法

    转自:http://www.cnblogs.com/jiackyan/archive/2013/04/14/3019893.html //重载 virtual bool ccTouchBegan(CC ...

  2. pomelo windows 安装笔记

    1.安装nodejs http://nodejs.org/download/...这个简单.. 2.下载pomelo..并且 安装所需要的包.未能加载visual c++组件 “VCBuild.exe ...

  3. android125 zhihuibeijing 缓存

    ## 三级缓存 ## - 内存缓存, 优先加载, 速度最快 - 本地缓存(内存卡), 次优先加载, 速度快 - 网络缓存, 不优先加载, 速度慢,浪费流量 package com.itheima.zh ...

  4. ibdata文件增大的原因

    http://blog.itpub.net/22664653/viewspace-1994016/

  5. XMemcached使用示例--转

    Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached通过它的自定义协议与客户端 ...

  6. Using zend-paginator in your Album Module

    Using zend-paginator in your Album Module TODO Update to: follow the changes in the user-guide use S ...

  7. Asp.Net 之 下载文件的常用方式

    1.直接使用Response.TransmitFile(filename)方法 protected void Button_Click(object sender, EventArgs e) { /* ...

  8. Socket异步通信学习三

    接下来是客户端部分,采用同步接收模式,在SocketClient项目中新建了一个SynServer类,用于存放socket服务器代码,和AsynServer类似,主要有4个方法: 有一个全局socke ...

  9. 关于oozie

    什么是Oozie? Oozie是一个工作流引擎服务器,用于运行Hadoop Map/Reduce和Pig 任务工作流.同时Oozie还是一个Java Web程序,运行在Java Servlet容器中, ...

  10. 关于SWT的线程问题

    大部分情况下,GUI界面编程是不用考虑线程问题的,SWT已经帮助我们隐藏了底层的线程调用. 但是一些特殊应用的实现,却不得不涉及SWT线程编程.比如说当进度条的例子(以后要加上,现在还没有做,没有总结 ...