知识点:队列
队列是一种先进先出的线性表。它只允许在表的前端进行删除操作,在表的后端进行插入操作。进行插入的端称为队尾(rear),进行删除操作的端称为队头(front)。队中没有元素的时候称为空队列。
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1276
题目解析:
遇到0表示队列结束,构造函数创建新队列。可以用queue容器和stack容器解决问题。
要加头文件#<queue>,基本操作有:
1.定义一个队列:queue<int> q;
2.判断空队列:q.empty() 注意:为空返回true
3.计算元素个数:q.size()
4.队尾压入新元素:q.push()
5.队首返回元素值,不删除:q.front()
6.删除队首元素,不返回值:q.pop()
7.返回队尾元素值,不删除:q.back()
解题代码:
#include
#include
#include
#include
#include
using namespace std;
queue q;
int cmp(int k)
{int i=1;
while(q.front()!=0)
{if(i%k!=0) q.push(q.front());
q.pop();i++;
}q.push(0);
q.pop();
}
int main()
{
int n,i;
scanf("%d",&n);
while(n--)
{int w;
scanf("%d",&w);
for(i=1;i<=w;i++) q.push(i);
q.push(0);
i=1;
while(q.size()>4)
{if(i%2==0) cmp(3);
else cmp(2);
i++;
}
int flag=0;
while(!q.empty())
{if(q.front()!=0) {if(flag) printf(" "); flag=1;printf("%d",q.front());}
q.pop();
}printf("\n");
}
}