算法刷题记录:NC22227 约瑟夫环

发布时间 2023-05-23 13:37:38作者: 想个昵称好难ABCD

题目链接

https://ac.nowcoder.com/acm/problem/22227

解题思路

模拟环。

AC代码

#include <iostream>
#include <vector>

using namespace std;

int n, st, m, i;
vector<int> v;

int main()
{
    while (cin >> n >> st >> m)
    {
        v.clear();
        for (int i = 1; i <= n; ++ i) v.push_back(i);

        int pos = st - 1;
        for (int i = n - 1; i >= 0; -- i)         // 赶走n-1个人,会被淘汰n-1次
        {
            pos = (pos + m - 1) % v.size();       // 每次从第pos个人开始,m-1:下标应当从0开始
            v.erase(pos + v.begin());             // 删除第pos个人
        }
        cout << v[pos] << endl;
    }
}