问题标题: 酷町堂:3999 使用循环链表写

0
0

0
已采纳
黄子扬
黄子扬
初级天翼
初级天翼

好的,我这里有两种写法,代码是洛谷P1996约瑟夫的

一是队列,二是链表,个人觉得队列简单且好理解,链表的迭代器有种指针的意味,有些抽象

/*
#include<bits/stdc++.h>
using namespace std;
queue<int>q;
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        q.push(i);
    while(q.size()>1)
    {
        for(int i=1;i<m;i++)
            q.push(q.front()),q.pop();
        cout<<q.front()<<" ";
        q.pop();
    }
    cout<<q.front()<<endl;
    return 0;
} 
*/
#include<bits/stdc++.h>
using namespace std;
list<int>a;
int n,m,cnt;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        a.push_back(i);
    list<int>::iterator it,now;
    it=a.begin();
    while(!a.empty())
    {
        cnt++;
        now=it;
        if(++it==a.end())
            it=a.begin();
        if(cnt==m)
        {
            cout<<*now<<" ";
            a.erase(now);
            cnt=0;
        }
    }
    return 0;
} 

注:不是本题代码,无举报

0
侯平仄
侯平仄
新手天翼
新手天翼

一定要使用循环链表写

我要回答