不用链表 n个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,每次报数到p的人退出圈外,其余的人再从1、2、3开始报数,直到所有人都退出圈外。请按退出顺序输出每个退出人的原序号。
时间: 2023-04-03 09:03:01 浏览: 86
Python使用列表完成程序的编写:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到m报数),凡是报到m的人退出圈子,问最后留下的是原来第几号的人。
5星 · 资源好评率100%
这是一个经典的约瑟夫问题,可以使用数组模拟循环队列来解决。具体实现方法可以参考以下代码:
#include <stdio.h>
#define MAX_N 1000
int main() {
int n, p;
int a[MAX_N], b[MAX_N];
scanf("%d%d", &n, &p);
for (int i = 0; i < n; i++) {
a[i] = i + 1;
}
int cnt = 0, cur = 0;
while (cnt < n) {
int k = 0;
for (int i = 0; i < n; i++) {
if (a[i] != 0) {
k++;
if (k == p) {
b[cur++] = a[i];
a[i] = 0;
cnt++;
}
}
}
}
for (int i = 0; i < n; i++) {
printf("%d ", b[i]);
}
printf("\n");
return 0;
}
注意,这里的输出顺序是按照退出顺序输出每个退出人的原序号。
阅读全文