游戏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;//此时两个迭代器均指向同一个内存区域。
posted @ 2019-08-08 00:40  归根复命  阅读(134)  评论(0编辑  收藏  举报