C语言实现实现约瑟夫环问题 新手入门
时间: 2024-09-28 18:04:40 浏览: 35
C语言约瑟夫环的实现
约瑟夫环问题是这样的一种算法问题:在一个由n个人组成的环形队列中,从第一个人开始按顺时针方向计数,每隔k个人出列并删除,直到队伍中只剩一人为止。通常用递归或循环的方式来解决。
以下是使用C语言新手入门的方式,通过循环实现约瑟夫环问题:
```c
#include <stdio.h>
// 定义函数,参数为人数、起始位置和步长
void josephus(int n, int k, int start) {
if (n <= 1) {
printf("剩余的人数小于等于1,结束。\n");
return;
}
// 创建一个数组模拟环形队列,并设置标志位
int remaining[n], pos = start - 1, count = 0;
for (int i = 0; i < n; ++i) {
remaining[i] = i + 1;
}
while (n > 1) {
// 每隔k人跳过,删除对应索引处的人
pos = (pos + k - 1) % n;
n--;
printf("第%d个人出列\n", remaining[pos]);
}
// 输出最后剩下的那个人
printf("最后剩下的人是第%d号\n", remaining[0]);
}
int main() {
int people, step;
printf("请输入总人数(n)和步长(k): ");
scanf("%d %d", &people, &step);
josephus(people, step, 1); // 起始位置通常设为1
return 0;
}
```
阅读全文