data-structure-experiments/5/main.c

50 lines
971 B
C

#include <stdio.h>
#include <stdlib.h>
int rs[105]; // 每个人的状态
int n; // 人数
int xcz; // 剩余人数
int m[105], m0; // 间隔
int zj(int a) {
// 寻找下一个活着的人
a++;
if (a > n)
a -= n;
while (rs[a] == 0 && xcz > 0) {
a++;
if (a > n)
a -= n;
}
return a;
}
int main() {
freopen("data.in", "r", stdin);
scanf("%d%d", &n, &m0);
for (int i = 1; i <= n; i++)
scanf("%d", &m[i]);
xcz = n;
for (int i = 1; i <= n; i++)
// 把每个人设置为活着
rs[i] = 1;
while (m0 > n) {
m0 -= n;
}
for (int i = m0; xcz > 0;) {
if (rs[i] == 1) {
rs[i] = 0;
xcz--;
printf("%d ", i);
}
int ls = m[i];
// printf("ls=%d\n", ls);
while (ls--)
i = zj(i);
}
return 0;
}
// 尚未修改到课程版本
// Ref: P1996 约瑟夫问题