解密QQ号的队列算法

新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问QQ号,小哈当然不会直接告诉小哼啦,原因嘛你懂的。所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则。规则是这样的:首先将第1个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数再放到这串数的末尾,再将第5个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起就是小哈的QQ啦。现在你来帮帮小哼吧。小哈给小哼加密过的一串数是“6 3 1 75 8 9 2 4”。

OK,现在轮到你动手的时候了。快去找出9张便签或小纸片,将“6 3 1 75 8 9 2 4”这9个数分别写在9张便签上,模拟一下解密过程。如果你没有理解错解密规则的话,解密后小哈的QQ号应该是“6 1 5 94 7 2 8 3”。

其实解密的过程就像是将这些数“排队”。每次从最前面拿两个,第1个扔掉,第2个放到尾部。具体过程是这样的:刚开始这串数是“6 3 1 75 8 9 2 4”,首先删除6并将3放到这串数的末尾,这串数更新为“1 7 5 89 2 4 3”。接下来删除1并将7放到末尾,即更新为“5 8 9 24 3 7”。再删除5并将8放到末尾即“9 2 4 3 7 8”,删除9并将2放到末尾即“4 3 7 8 2”,删除4并将3放到末尾即“7 8 2 3”,删除7并将8放到末尾即“2 3 8”,删除2并将3放到末尾即“8 3”,删除8并将3放到末尾即“3”,最后删除3。因此被删除的顺序是“6 1 5 9 4 7 2 8 3”,这就是小哈的QQ号码了,你可以加她试试看^_^。

既然现在已经搞清楚了解密法则,不妨自己尝试一下去编程,我相信你一定可以写出来的。

首先需要一个数组来存储这一串数即intq[101]。并初始化这个数组即intq[101]={0,6,3,1,7,5,8,9,2,4};(此处初始化是我多写了一个0,用来填充q[0],因为我比较喜欢从q[1]开始用,对数组初始化不是很理解的同学可以去看下我的上一本书《啊哈C!思考快你一步》)接下来就是模拟解密的过程了。

解密的第一步是将第一个数删除,你可以想一下如何在数组中删除一个数呢?最简单的方法是将所有后面的数都往前面挪动一位,将前面的数覆盖。就好比我们在排队买票,最前面的人买好离开了,后面所有的人就需要全部向前面走一步,补上之前的空位,但是这样的做法很耗费时间。

在这里,我将引入两个整型变量head和tail。head用来记录队列的队首(即第一位),tail用来记录队列的队尾(即最后一位)的下一个位置。你可能会问为什么tail不直接记录队尾,却要记录队尾的下一个位置呢?这是因为当队列当中只剩下一个元素时,队首和队尾重合会带来一些麻烦。我们这里规定队首和队尾重合时,队列为空。

现在有9个数,9个数全部放入队列之后head=1;tail=10;此时head和tail之间的数就是目前队列中“有效”的数。如果要删除一个数的话,就将head++就OK了,这样仍然可以保持head和tail之间的数为目前队列中“有效”的数。这样做虽然浪费了一个空间,却节省了大量的时间,这是非常划算的。新增加一个数也很简单,把需要增加的数放到队尾即q[tail]之后再tail++就欧克啦。

我们来小结一下,在队首删除一个数的操作是head++;

在队尾增加一个数(假设这个数是x)的操作是q[tail]=x;tail++;

整个解密过程,请看下面这个霸气外漏的图。

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/

时间: 2024-10-02 15:11:19

解密QQ号的队列算法的相关文章

腾讯的败笔:QQ号之外建微信ID体系 很少用户会记微信号

在7月3日的腾讯合作伙伴大会上,微信专场的火爆程度远远超出人们想象,可以容纳一两百人的会场据说有上千人报名. 微信的强大从来没有人否认,但是我认为,在移动互联网上腾讯最值钱的并不是微信,而是腾讯多年来积累的QQ帐号ID体系. 这是因为PC互联网讲究流量变现,而移动互联网讲究用户变现.到了移动互联网上,单个大流量App的变现价值会被缩小,但是大流量App所积累的用户体系,却是一笔非常宝贵的财富. 流量和用户的区别在于,流量是每天有许多的人从你的产品上经过,但是你根本不知道他们是谁,你不知道他们是男

登录 授权 第三方帐号-QQ授权登陆后,网站如何提取QQ号,QQ邮箱信息?

问题描述 QQ授权登陆后,网站如何提取QQ号,QQ邮箱信息? QQ授权登陆后,网站如何提取QQ号,QQ邮箱信息,用来新注册一个帐号 解决方案 这2个获取不到,只能获取"昵称.头像.性别 ",QQ会员的基本信息 ,QQ会员的高级信息,获取用户QQ空间相册列表等信息需要申请. 看这个:http://wiki.open.qq.com/wiki/website/API%E5%88%97%E8%A1%A8 解决方案二: 与这个QQ对应的唯一标识就是openid,你可以再让用户补全其他信息 解决方

如何实现winfrom程序中点击一个QQ 号 弹出临时会话界面,直接聊天,且不用加好友呢? 在线等哦

问题描述 如何实现winfrom程序中点击一个QQ 号 弹出临时会话界面,直接聊天,且不用加好友呢? 在线等哦 1C 全部家当了 , 救救我吧!如何实现winfrom程序中点击一个QQ 号 弹出临时会话界面,直接聊天,且不用加好友呢? 在线等哦 解决方案 如果用户计算机上安装了qq,可以用Process.Start启动" tencent://message/?uin=你的QQ号码" 解决方案二: 这个是用Jquery实现的你可以在网上搜一搜然后在程序里稍作修改就可以了: 如果回答对你有

JS判断客服QQ号在线还是离线状态的方法_javascript技巧

本文实例讲述了JS判断客服QQ号在线还是离线状态的方法.分享给大家供大家参考.具体分析如下: 不知道从什么时候开始,原来QQ官方自带的在线离线状态的代码已经不能准确显示在线或离线状态了,现在自己用JS判断QQ在线离线状态值,根据状态值输出在线图片还是离线图片.  复制代码 代码如下: <script src="JS/jquery-1.5.1.min.js"></script>  <div class="kfli" onclick=&qu

方正宽带首页被黑 大胆黑客留下QQ号

今天一早6点50分左右,有网友致电新浪科技报料称方正宽带首页http://www.bnchina.com被黑. 新浪科技随即打开方正宽带首页,发现情况果然如报料者所言,页面显示一条"腾龙",表明网站被黑.值得注意的是该黑客还留下了自己的QQ号和网名"风吹夜落",并且在网页低部甩下了走马灯形式的滚动留言. 以下是黑客留言:"做为大名鼎鼎的方正宽带,其网络与编程之技术乃佼佼者也!今日之见,可见一斑.中国之大,可见汝之网络技术甚差,大失所望.今晚生于第2次进入贵

c#-C# 根据qq号列表,点击某个号码的时候弹出 qq好友聊天窗口

问题描述 C# 根据qq号列表,点击某个号码的时候弹出 qq好友聊天窗口 C# 根据qq号列表,点击某个号码的时候弹出 qq好友聊天窗口 解决方案 你是要自己实现一个山寨的QQ还是要调用QQ 开放的API来实现? http://www.dotblogs.com.tw/axu/archive/2012/04/07/opensns_qq.aspx 解决方案二: http://www.cnblogs.com/sufei/archive/2012/12/13/2816737.html 解决方案三: 直接

案例说法:盗窃QQ号,违法吗?

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 简要内容:12月初,辽宁省高级人民法院通报,该省一起以盗用QQ号码为手段的罕见网络侵权案已审理终结,充当"黑客"的沈阳一家数码影像公司在盗用竞争对手QQ号后,通过连续攻击,造成 对方数万份客户文件被删除.受害方因此终审获赔20万元.这一案件的审结,使得"QQ号盗窃"再次成为社会各界的关注焦点. 12月初,辽宁省高级人民法院通报,该省一起以盗用QQ号码为手段的罕见网络侵权案已审理终结,充当"黑客&quo

男子种植木马盗他人QQ号骗巨款被抓

信息时报讯 (记者 蔡胜龙 通讯员 荔检宣) 因儿子QQ号被盗,赖先生轻信对方被骗35万元巨款.近日,荔湾区检察院批准逮捕种木马盗取 他人QQ号进而实施诈骗的胡某强.检察官提醒市民,网上账号及 手机 都有被盗的可能,收到类似要借钱或汇钱的网上信息或者手机信息,应打电话或亲自与对方见面确认,以免上当受骗.2012年10月21日11时许,赖先生在公司办公室上网,这时候儿子在QQ上联系上他."老爸,我有个朋友做律师的,要买房子,急需要借钱"."要多少?"赖某问道.对方一开

丢失天价QQ号98888 警方已立案调查

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 4月7日,深圳市公安局高新技术园区派出所正式立案处理一宗罕见的物品丢失案.报案者是专程从江苏赶来的年轻人陈学军,他丢失了46个QQ号,涉案金额竟达到60万元人民币,其中一个"98888"的QQ号就花了陈学军超过15万元人民币. 这是目前涉案金额最高的QQ盗号案,腾讯公司回应称他们并没有回收这批号码,目前已经开始积极配合警方的调查. 事情发生在4月,除了陈学军之外,还有很多网友也在同一时间丢失了自己的QQ号,网友给此事起了个名字:&