实现约瑟夫环问题c语言
时间: 2024-10-01 20:09:53 浏览: 68
约瑟夫环问题是这样的经典问题:在一个由n个人围成的圈子里,从第一个人开始报数,每次数到m的人会被排除出圈子,并跳过下一个人继续计数。当只剩下一个人的时候,游戏结束,这个人就是赢家。这个过程可以用循环和条件判断来在C语言中实现。
下面是一个简单的C语言程序版本:
```c
#include <stdio.h>
void josephus(int n, int m) {
if (n == 1) { // 如果只剩一人,直接返回
printf("剩下的最后一个人是 %d\n", 1);
return;
}
int current = 0; // 当前位置,初始化为0
while (n > 1) {
current = (current + m - 1) % n; // 报数并更新位置
n--;
printf("%d 被淘汰,现在轮到 %d\n", current + 1, current + 1); // 输出被淘汰者及下一个报数者
}
}
int main() {
int num_people, skip_count;
printf("请输入人数(n): ");
scanf("%d", &num_people);
printf("请输入步长(m): ");
scanf("%d", &skip_count);
josephus(num_people, skip_count);
return 0;
}
```
在这个程序中,`josephus`函数负责模拟游戏过程,`main`函数获取用户输入并调用该函数。运行此程序,根据输入的n和m值,它将逐步淘汰参与者,直到剩下最后一个。
阅读全文
相关推荐

















