用C语言编写约瑟夫环求解的线性表
时间: 2024-09-26 13:12:11 浏览: 60
在C语言中,我们可以使用数组和指针来模拟约瑟夫环的问题。约瑟夫环是一个经典问题,给定一个整数n和初始值k,人们从1开始按顺序报数,每到k的人出列,然后从下一个人继续,直到剩下最后一个人。以下是简单的C代码实现:
```c
#include <stdio.h>
#define MAX_N 100 // 设置最大人数
#define K 4 // 报数循环
void josephus(int n, int k) {
int arr[MAX_N]; // 创建数组存储人员编号
int count = 0; // 当前报数计数器
int next = k - 1; // 初始化下一个淘汰者为k-1
// 将人员编号填充到数组
for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}
while (n > 1) { // 只要还有人,就继续循环
printf("%d ", arr[next]); // 输出下一个淘汰者
n--;
count++; // 报数加一
next = (next + k - 1) % n; // 更新下一个淘汰者的索引
}
printf("胜利者: %d\n", arr[0]); // 最后剩下的那个人就是胜利者
}
int main() {
int n, k;
printf("请输入人数n和报数间隔k: ");
scanf("%d %d", &n, &k);
josephus(n, k);
return 0;
}
```
在这个程序中,用户输入人数n和报数间隔k后,函数`josephus`会按照规则计算并输出被淘汰的序列和最终的胜利者。
阅读全文