问题是给你一串数字,先将第一个删除,第二个放到队尾,第三个删除,第四个放到队尾,知道最后一个数字删除,求每次删除的数字。
首先,用c++普通算法实现。
#include<iostream>
using namespace std;
int main()
{
int q[100];
int i,head,tail,n;
while(cin>>n)
{
for(i=1;i<=n;i++)
cin>>q[i]; //输入
head=1; //指向数组的头
tail=n+1; //指向数组的尾加1,要存入删除的头
while(head<tail)
{
cout<<q[head]; //输出头
head++; //队首出队
q[tail]=q[head]; //新的队首添加到队尾
tail++; //队尾后移
head++; //下一个出队的队首
}
cout<<'\n';
}
return 0;
}
用c++中的队列函数queue实现。
queue入队,如例:q.push(x); 将x 接到队列的末端。
queue出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问queue队首元素,如例:q.front(),即最早被压入队列的元素。
访问queue队尾元素,如例:q.back(),即最后被压入队列的元素。
判断queue队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()
#include<queue>
using namespace std;
int main()
{
queue <int> q;
int i,n;
while(1)
{
while(cin>>n) //输入n,以^z结束
q.push(n); //将n插入队尾
while(!q.empty()) //当队列不为空
{
cout<<q.front()<<' '; //输出队首数字
q.pop(); //删除队首数字
q.push(q.front()); //将新的队首数字插入到队尾
q.pop(); //删除队首数字
}
}
return 0;
}