有M个人围坐成一圈,编号依次从1开始递增,现从编号为1的人开始报数,报到N的人出列,然后再从下一人开始重新报数,报到N的人出列;重复这一过程,直至所有人出列。
时间: 2024-03-04 17:04:46 浏览: 74
python 有n个人围成一圈,顺序排号,问最后留下的是原来第几号的那位。(示例)
5星 · 资源好评率100%
好的,以下是约瑟夫环的C语言代码:
```c
#include <stdio.h>
int josephus(int n, int m) {
int i, s = 0;
for (i = 2; i <= n; i++) {
s = (s + m) % i;
}
return s + 1;
}
int main() {
int n, m, s;
printf("请输入人数n和报数m:\n");
scanf("%d%d", &n, &m);
s = josephus(n, m);
printf("最后胜利的编号为:%d\n", s);
return 0;
}
```
这段代码中,josephus函数是用来计算约瑟夫环问题的解法,其中n表示人数,m表示每次报数的数目,s表示最后留下的人的编号。在主函数中,我们通过scanf函数获取用户输入的人数n和报数m,然后调用josephus函数计算出最后留下的人的编号s,并输出结果。
阅读全文