#include<bits/stdc++.h>
const int N = 100;
struct node {
int previp, nextip;
int data;//这里用data代表该double_linknode的ip
}nodes[N];
int main() {
int n, m;
scanf_s("%d %d", &n, &m);
nodes[0].nextip = 1;
for (int i = 1; i <= n; i++) {
nodes[i].data = i;
nodes[i].previp = i - 1;
nodes[i].nextip = i + 1;
}
//最开始一个和最后一个的node记得修改指向
nodes[n].nextip = 1;
nodes[1].previp = n;
int now = 1;
while ((n--) > 1) {
for (int j = 1; j < m; j++) {
now = nodes[now].nextip;
}
printf("%d ", nodes[now].data);
int prev, next;
prev = nodes[now].previp;
next = nodes[now].nextip;
nodes[prev].nextip = nodes[now].nextip;
nodes[next].previp = nodes[now].previp;
now = next;//由于可以由now得到prev,所以只用对next对now进行更新就行
}
printf("%d ", nodes[now].nextip);
return 0;
}
使用双向静态链表解决约瑟夫问题
于 2024-07-25 20:29:27 首次发布