游戏201712-2
#include<iostream> #include<queue> using namespace std; int main() { int n,k; queue<int> q; cin>>n>>k; //队列初始化 for(int i=1;i<=n;i++) { q.push(i); } int no=0,head; while(!q.empty()) { head=q.front(); q.pop(); no++; if(no % k == 0 || no % 10 == k) ; else q.push(head); } cout<<head<<endl; return 0; }
Tips:
看到这个题目,第一想到的肯定时要报数嘛,还要循环起来,那就用循环队列,可是难道要自己写?
利用STL中queue实现循环队列
循环队列主要是有一个指针可以指来指去,来去自如,但queue中好像能用也就时头front和尾back,但这都固定没法用。
问题就来了
那么既然想要指针绕着队列转没办法实现,那就让队列自转经过指针就好了。
好,第一个过来(用front),先站出来(赋值给一个临时额外变量,然后pop掉),实现所需操作,然后若还需要(本题中就需要判断是删去还是还要保留)站到队尾去。
下一个过来,让朕好好看看,然后下一个。。。。
如此一来,可不就转起来了?
about List:http://www.cplusplus.com/reference/list/list/
about function erase:http://www.cplusplus.com/reference/list/list/erase/
每种容器都定义了自己的迭代器类型,如list:
list<int>::iterator iter; //定义一个名为iter的变量
list<int>::iterator iter1=iter;//此时两个迭代器均指向同一个内存区域。