一、问题引入

小明和小丽同在一个自习室上自习,小明感觉小丽是一个很不错的女孩,于是他鼓足勇气向小丽要QQ号,然而小丽也是个矜持的女孩,当然不会直接告诉他,所以小丽给了小明一串加密过的数字,同时她也告诉小明解密规则:首先将第一个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数放到这串数的末尾,以此类推...直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起就是小丽的QQ号了。加密过的一串数字为“6 3 1 7 5 8 9 2 4”.

注:如果用9张小纸片,将9个数字分别写在9张纸片上,模拟一下解密过程,正确的结果应该是“6 1 5 9 4 7 2 8 3”。

当然了,如果这么快就结束了这个问题,那还写这个有什么意思呢,下面我们用代码来实现它。

二、分析

  1. 首先需要一个数组来存储这一串数即 int q[101],并初始化这个数组即 int q[101]={0,6,3,1,7,5,8,9,2,4} (此处初始化多写一个0是用来填充q[0])。
  2. 解密的第一步是将第一个数删除,删除一个数最简单的方法是将所有后面的数都往前面挪动一位,将前面的数覆盖。就像我们在食堂排队打饭,最前面打饭的人打好后离开了,后面所有的人就需要全部向前面走一步,补上之前的空位,但这样做的缺点是浪费时间。
  3. 在这里,我将引入两个整型变量head和tail。head用来记录队列的队首(第一位),tail用来记录队列的队尾(最后一位)的下一个位置(当队列中只剩下一个元素时,队首和队列重合会带来一些麻烦。我们这里规定队首和队尾重合时,队列为空)。
  4. 所以在队首删除一个数的操作是head++;在队尾增加一个数(假设这个数是x)的操作是q[tail]=x;tail++。

三、代码实现

    int q[]={,,,,,,,,,},head,tail;
/*初始化队列*/
head=;
tail=; //队列中已经有9个元素了,tail指向队尾的后一个位置
while(head<tail) //当队列不为空的时候执行循环
{
printf("%d ",q[head]); //打印队首并将队首出队
head++; q[tail]=q[head]; //先将新队首的数添加到队尾
tail++;
head++; //再将队首出队
}
return ;

四、总结

  1. 队列是一种特殊的线性结构,它只允许在队列的首部(head)进行删除操作,这称为“出队”,而在队列的尾部(tail)进行插入操作,这称为“入队”。
  2. 当队列中没有元素时(head==tail),称为空队列。
  3. 新来的人总是站在队列的最后面,来得越早的人越靠前,先来的人先服务,我们称为“先进先出”(First In First Out,FIFO)原则。

现在我们将队列的三个基本元素(一个数组,两个变量)封装为一个结构体类型,如下:

struct queue{
int data[]; //队列的主体
int head; //队首
int tail; //队尾
};

下面我们就使用结构体来实现队列的操作:

#include<stdio.h>
struct queue{
int data[]; //队列的主体
int head; //队首
int tail; //队尾
}; int main()
{
struct queue q;
int i;
/*初始化队列*/
q.head=;
q.tail=;
for(i=;i<=;i++)
{
scanf("%d ",&q.data[q.tail]); //依次向队列插入9个数
q.tail++;
} while(q.head<q.tail)//当队列不为空的时候 执行循环
{
printf("%d ",&q.data[q.head]); //打印队首并将队首出队
q.head++;
q.data[q.tail]=q.data[q.head]; //先将新队首的数添加到队尾
q.tail++;
q.head++; //再将队首出队
}
getchar();getchar();
return ;
}

解密QQ——队列的更多相关文章

  1. 队列——解密QQ号

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

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

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

  3. 队列解密QQ号

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

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

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

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

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

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

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

  7. 啊哈!算法:解密QQ号

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

  8. 解密QQ号

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

  9. 找女神要QQ号码

    引言 我们组来了个美女程序员,我心里窃喜,哈哈这下机会来了.我在想怎么下手呢?好吧,还是从QQ号码开始,找到女神要到QQ号,哈哈,我真是个天才~~~ 是这样子滴 想法是美好的,现实是残酷的,找女神要Q ...

随机推荐

  1. angular-resource版本差异问题

    在 AngularJS v1.3.0-beta.14 这个版本里,使用query方法,如果传递进来的数据不是数组,会报错. 在 AngularJS v1.2.18 这个版本里,使用query方法,如果 ...

  2. python--笨方法学python 习题52

    笨方法学python是一本不错的python入门书籍.书的最后一节是一个web版的游戏程序,以下是程序代码: 1.项目的目录结构如下所示:skeleton\ app.py map.py templat ...

  3. (转)C++头文件顺序

    转自:http://blog.csdn.net/clever101/article/details/7269058关键总结:先包含的头文件的函数会覆盖后包含的头文件的同名函数.建议采用Google C ...

  4. Asp.Net MVC绑定DropDownList等控件

    测试环境:vs2013..Net4.5.mvc5 一.Asp.Net MVC绑定控件原理说明 以Html.TextBox为例 /// <param name="name"&g ...

  5. JS实现获取当前URL和来源URL的方法

    通用模式: Javascript 正常取来源网页的URL只要用: index.html: <!DOCTYPE html> <html lang="zh-cn"&g ...

  6. Android开发(一)——全屏或者取消标题栏

    先介绍去掉标题栏的方法: 第一种:也一般入门的时候经常使用的一种方法 requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 注意这句一定要写在se ...

  7. mysql防止误删除的方法

    为了防止在更新和删除的时候,没有写where条件而对全部数据进行操作,mysql提供了一个参数来防止此情况的发生 需要在启动mysql的时候,增加参数--i-am-a-dummy含义是我是新手,或者使 ...

  8. pandas的学习总结

    pandas的学习总结 作者:csj更新时间:2017.12.31 email:59888745@qq.com 说明:因内容较多,会不断更新 xxx学习总结: 回主目录:2017 年学习记录和总结 1 ...

  9. <漫步华尔街——股市历久弥新的成功投资策略>读书笔记

    书在这里 随机游走是指基于过去的表现,无法预测将来的发展步骤和方向. 仅仅为了达到盈亏相抵点,你的投资回报率至少也要等于通货膨胀率 磐石理论认为,无论是普通股票还是不动产,每一种投资工具都具有被称为“ ...

  10. 在Word 2007中添加参考文献及其引用的方法

    以前写文章的时候忽略了在文章中添加参考文献及其引用的方式,文章各式显得不太正式,在网上进行了相关搜索,将方法整理如下: 1.将光标停留在需要插入文献的地方[1],选择菜单栏上的"引用 -&g ...