c语言数组实现约瑟夫问题
时间: 2023-11-24 13:51:05 浏览: 101
以下是使用C语言数组实现约瑟夫问题的代码:
```c
#include <stdio.h>
#include <stdlib.h>
int josephus(int n, int k) {
int i, j = 0, m = 0;
int *p = (int *)malloc(n * sizeof(int)); // 动态分配数组空间
for (i = 0; i < n; i++) {
*(p + i) = i + 1; // 初始化数组
}
while (m < n - 1) { // 只剩一个人时退出循环
for (i = 0; i < n; i++) {
if (*(p + i) != 0) { // 找到还未出列的人
j++;
if (j == k) { // 找到第k个人
*(p + i) = 0; // 标记为已出列
j = 0;
m++;
}
}
}
}
for (i = 0; i < n; i++) {
if (*(p + i) != 0) { // 找到还未出列的人
free(p); // 释放数组空间
return *(p + i); // 返回最后一个出列的人的编号
}
}
free(p); // 释放数组空间
return 0;
}
int main() {
int n, k;
printf("请输入总人数n和出列周期k:");
scanf("%d%d", &n, &k);
int last = josephus(n, k);
printf("最后一个出列的人的编号为:%d\n", last);
return 0;
}
```
阅读全文