1 条题解

  • 0
    @ 2022-11-2 14:25:27

    链表实现

    #include <bits/stdc++.h>
    using namespace std;
    
    int n, m;
    int nxt[105], pre[105];
    void del(int x)
    {
        pre[nxt[x]] = pre[x];
        nxt[pre[x]] = nxt[x];
    }
    int main()
    {
        cin >> n >> m;
        
        for (int i = 1; i <= n; i++)
        {
            nxt[i] = i + 1;
            pre[i] = i - 1;
        }
        pre[1] = n;
        nxt[n] = 1;
    
        int now = n; //从 n 开始就可以不停做“往后数 m 个数,删掉当前数”了。
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m; j++)
                now = nxt[now];
            cout << now << " ";
            del(now);
        }
    
        return 0;
    }
    

    队列实现

    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    queue<int> q; 
    int main()
    {	
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    		q.push(i);
    	for(int i=1;i<=n;i++){
    		//先让m-1个人到末尾去
    		for(int j=1;j<=m-1;j++){		
    			q.push(q.front());
    			q.pop(); 
    		}
    		cout<<q.front()<<" ";
    		q.pop();
    	} 
    	return 0;
    }
    
    
    • 1

    信息

    ID
    1155
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    71
    已通过
    51
    上传者