解密QQ 号——队列

一、问题描述

有一种对一列数字的加密方式,解密规则如下:首先将加密后数字中的第1个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数放到这串数的末尾,再将第5个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在一起就是原本的数字排列。

例如加密过的一串数是“6 3 1 7 5 8 9 2 4”。解密的过程就像是将这些数“排队”。每次从最前面拿两个,第1个扔掉,第2个放到尾部。具体过程是这样的:刚开始这串数是“6 3 1 7 5 8 9 2 4”,首先删除6并将3放到这串数的末尾,这串数更新为“1 7 5 8 9 2 4 3”。接下来删除1并将7放到末尾,即更新为“5 8 9 2 4 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”,这就是解密得到的数字串。

二、代码实现

这里的代码和书上不太一样,为了更贴近正常题目,我改成了由用户输入需要解密的数字串,第一行为数字串长度,第二行为需要加密的数字串。

【输入】

9
6 3 1 7 5 8 9 2 4

【输出】

6 1 5 9 4 7 2 8 3 

【代码1】

 1 import java.util.Scanner;
 2
 3 public class Main {
 4     public static void main(String[] args) {
 5         // TODO Auto-generated method stub
 6         Scanner reader = new Scanner(System.in);
 7         int n = reader.nextInt();
 8         int a[] = new int[102];
 9         int head=0;
10         int tail=n;
11         for(int i=0;i<n;i++){
12             a[i]=reader.nextInt();
13         }
14
15         while(tail>head){
16             //删除队首数字
17             System.out.printf("%d ", a[head]);
18             head++;
19
20             //将数字移动到队尾
21             a[tail]=a[head];
22             tail++;
23             //再将队首出队
24             head++;
25         }
26     }
27 }

【代码2】对队列三要素(队列内容数组,队首变量,队尾变量)进行封装。

 1 import java.util.Scanner;
 2
 3 public class Main {
 4     public static void main(String[] args) {
 5         // TODO Auto-generated method stub
 6         Scanner reader = new Scanner(System.in);
 7         int n = reader.nextInt();
 8         Queue queue = new Queue(0, n);
 9         for(int i=0;i<n;i++){
10             queue.data[i]=reader.nextInt();
11         }
12         //System.out.println(queue.head);
13         //System.out.println(queue.tail);
14
15         while(queue.tail>queue.head){
16             //删除队首数字
17             System.out.printf("%d ", queue.data[queue.head]);
18             queue.head++;
19
20             //将数字移动到队尾
21             queue.data[queue.tail]=queue.data[queue.head];
22             queue.tail++;
23             //再将队首出队
24             queue.head++;
25         }
26     }
27 }
28 class Queue{
29     public int data[] = new int[100];//存队列内容
30     public int head;//队首
31     public int tail;//队尾
32     public Queue(int head,int tail){
33         this.head=head;
34         this.tail=tail;
35     }
36 }

三、队列

队列是一种特殊的线性结构,它只允许在队列的首部(head)进行删除操作,这称为“出队”,而在队列的尾部(tail)进行插入操作,这称为“入队”。当队列中没有元素时(即head==tail),称为空队列。在我们的日常生活中有很多情况都符合队列的特性。比如我们之前提到过的买票,每个排队买票的窗口就是一个队列。在这个队列当中,新来的人总是站在队列的最后面,来得越早的人越靠前,也就越早能买到票,就是先来的人先服务,我们称为“先进先出”(First In First Out,FIFO)原则。

原文地址:https://www.cnblogs.com/IcyYs/p/11350867.html

时间: 2024-10-12 15:41:35

解密QQ 号——队列的相关文章

队列——解密QQ号

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

队列浅析[解密QQ号]

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

【学习记录】YSM解密QQ号

试题描述: YSM 在年级里人缘特别好,大家都找他要 QQ 号,数学特别好的它有时也小卖弄一下,他把 QQ 号加密后告诉同学们,所以同学们要得到他的 QQ 号还得先解密.解密规则是这样的:首先将第一个数字删除,再讲第二个数字放到这串数的末尾,再将第 3 个数删除并将第 4 个数放到这串数的末尾,再将第5个数删除,........,以此类推,将最后一个数字也删除.按照刚才删除的顺序,把这些删除的数字连在一起,最后的 7 位就是 YSM 的 QQ 号.当然解密后的数字串肯定不止 7 位,不到 100

啊哈!算法:解密QQ号

书中给出的算法有点浪费空间,可以使用循环队列进行改进,这样就不需要使用额外的空间,在原数组的基础上就可以完成解密,代码如下: 1 #include <stdio.h> 2 3 void decode(int a[], int size) 4 { 5 int head = 0, tail = size;//tail point to next position to be written 6 7 while (head != tail){ 8 //删除队首元素 9 printf("%2

解密QQ——队列

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

纪勇破解QQ号问题

试题描述 来到了新学校,才相处不到一个月,jy就对oyjy一见钟情.于是向oyjy问QQ号.当然身为创(实)新(验)一班的同学,oyjy还是要考考jy.她给了纪勇一个加密后的QQ号,让纪勇解密,解密规则是这样的:首先将第一个数字删除,再将第二个数字放到这串数的末尾,再将第 3 个数删除并将第 4 个数放到这串数的末尾,再将第5个数删除,........,以此类推,将最后一个数字也删除.按照刚才删除的顺序,把这些删除的数字连在一起,最后的 7 位就是 oyjy 的 QQ 号.当然解密后的数字串肯定

c#代码抓取本地QQ号,很实用哦

//抓取QQ号 WebBrowser web = new WebBrowser(); //使用户可以在窗体中导航网页 private void 抓取QQToolStripMenuItem_Click(object sender, EventArgs e) { listView1.Columns.Clear(); listView1.Items.Clear(); listView1.Columns.Add("昵称",100); listView1 .Columns .Add ("

盗qq号软件下载

盗qq号软件下载●●高手QQ:705099868●●以前也在网上找过关于以及怎么破解qq聊天记录密码视频,但是都没有找到好的怎么破解qq聊天记录密码方法.无意中接触到这个人,他是专门帮人查QQ密码,微信密码,查QQ聊天记录,恢复微信记录,通话记录,短信,手机定位等,很讲信誉,技术不错. http://www.155588.com

经验分享:微信怎么关联qq号?

微信怎么关联qq号!你的QQ好友都能加到你,或者你可以用你的手机搜索你手机名单里的微信好友, 当然这些也可以不公开,设置到谁也找不到你.经常看网上网友碰到这样的问题"微信怎么关联qq号"如何将QQ和微信关联,也就是说QQ不在线,微信在线的时候也能收到QQ好友发过来的消息!! 第一步:设置-我的帐号-QQ号 填写正确: 第二步:设置-功能-启用QQ离线助手 -接收离线消息后面的勾打上 这样就能微信在线的时候也能收到QQ好友发过来的消息! 但是微信有一缺点,你必须登陆 或者后台微信 它才能