您的位置:首页 > 其它

解密QQ号--队列

2017-05-01 16:05 281 查看
小明新学期有了新同桌,想和新同桌认识一下,就询问新同桌的QQ号,新同桌平时喜欢玩解密游戏,就给新同桌一串加密的数字,解密规则如下:首先将第一个数删除,紧接着将第二个数放到这串数的末尾,再将第三个数删除,将第四个数放到这串数的末尾,再将第五个数删除……直到剩下最后一个数,将最后一个数删除,按照刚才顺序,把删除的数连在一起就是正确的QQ号。

这串加密的数字是“1752251268”,先用笔算一下,偷偷告诉你,正确答案是:1521675822.

这个方法要用队列来实现比较轻松一点。



用整形变量head记录队列的队首(第一位),tail用来记录队列的队尾(最后一位)的下一个位置。

队列为空:队列和队尾重合

队首删除:head++;

新增一个数:q[tail] = x; tail++;

代码实现:

#include <iostream>
using namespace std;

int main()
{
int q[] = {0, 1, 7, 5, 2, 2, 5, 1, 2, 6, 8};
int head = 1;
int tail = sizeof(q)/sizeof(q[0]); // 队列中有十个元素,tail指向队尾的后一个位置
int i = 0;

while(head < tail) //队列不为空时进行循环
{
//打印队首并将队首出队列
cout<<q[head]<<" ";
head++;

//先将新队首的数添加到队尾
q[tail] = q[head];
tail++;
//再将队首出列
head++;
}

system("pause");
return 0;
}


队列是一种特殊的线性结构,它只允许在队列的首部(head)进行删除操作,即就是出队操作,在队列尾部(tail)进行插入操作,即就是入队操作。当队列中没有元素,即就是head == tail,称为空队列。

用队列实现:

#include<iostream>
using namespace std;

struct queue
{
int data[100];//队列主体,存储内容
int head; //队首
int tail;//队尾
};

int main()
{
struct queue q;

//初始化队列
q.head = 1;
q.tail = 1;
for(int i=1; i<=10; ++i)
{
cin>>q.data[q.tail];
q.tail++;
}

while(q.head < q.tail)//d队列不为空时进行循环
{
//打印队首将队首出队列
cout<<q.data[q.head];
q.head++;

//将新队首添加到队尾
q.data[q.tail] = q.data[q.head];
q.tail++;

//将队首出队
q.head++;
}
cout<<endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: