解密QQ号--队列

来源:互联网 发布:vivo手机虚拟网络设置 编辑:程序博客网 时间:2024/05/17 09:32

小明新学期有了新同桌,想和新同桌认识一下,就询问新同桌的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;}
1 0
原创粉丝点击