解密qq

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

/*
 我们来小结一下,在队首删除一个数的操作是 head++;。
 在队尾增加一个数(假设这个数是 x)的操作是 q[tail]=x;tail++;。
*/
#include<iostream>
using namespace std;
int main()
{
	int s[20]={0,6,3,1,7,5,8,9,2,4};//将一维数组当做队列 ,用0填充s[0],习惯从是[1]开始操作 
	int head,tail;
	head=1;//head 用来记录队列的队首(即第一位) 
	tail=10;//tail 用来记录队列的队尾(即最后一位)的下一个位置 
	/*为什么 tail 不直接记 录队尾,却要记录队尾的下一个位置呢?这是因为当队列中只剩下一个元素时,队首和队尾重合会带来一些麻烦。
	我们这里规定队首和队尾重合时,队列为空。 
	*/
	while(head<tail)
	{
		cout<<s[head]<<" ";//打印队首
		head++;//从队首删除一个元素 
		s[tail]=s[head];//将新队首的数添加到队尾 
		tail++;
		head++;
	}
	return 0;

}

将队列封装成结构体实现的方法:

#include<iostream>
using namespace std;
typedef struct queue
{
	int s[20];//用来存储队列中的数据内容
	int head;//只向队首 
	int tail;// 只向队尾的下一个位置 
}queue;
int main()
{
	queue q;
	q.head=1;
	q.tail=1;
	//向队列中插入原始数据 
	for(int i=1;i<10;i++)
	{
		cin>>q.s[q.tail];
		q.tail++;
	}
	while(q.head<q.tail)//当队列不为空的时候执行循环 
	{
		cout<<q.s[q.head]<<" "; 
		q.head++;
		q.s[q.tail]=q.s[q.head];
		q.tail++;
		q.head++;
	}
	return 0;	 
} 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值