OVSolitario-io

导航

链表

约瑟夫问题(链表)

#include <bits/stdc++.h>
using namespace std;
int nxt[110], n, m;
int main() {
    scanf("%d%d", &n, &m);
    for(int i = 1; i < n; ++ i) nxt[i] = i + 1;
    nxt[n] = 1;//n后面是1
    
    int now = n;//从n开始,因为1是第一个,从1开始2是第一个
    for(int t = 1; t <= n; ++ t) {
        for(int j = 1; j <= m - 1; ++ j) {
            now = nxt[now];
        }
        printf("%d ", nxt[now]);
        nxt[now] = nxt[nxt[now]];
    }
}

其中nxt[now] = nxt[now + 1]为错误写法,会导致nxt值为删除过的点

正确:nxt[now] = nxt[nxt[now]];应为我当前后面的下一个

posted on 2025-12-03 16:11  TBeauty  阅读(4)  评论(0)    收藏  举报