链表
约瑟夫问题(链表)
#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]];应为我当前后面的下一个
浙公网安备 33010602011771号