C语言指针解决以下问题有 n 个人围成一圈,顺序排号,从第 1 个人开始报数,从 1 报到 m,凡报到 m 的人退 出圈子,问最后留下的是原来第几号的人?下列函数完成上述处理,其中 m、n 的(m<n) 值由主调函数输入,函数返回值为所求结果
时间: 2023-06-09 13:04:33 浏览: 117
Python使用列表完成程序的编写:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到m报数),凡是报到m的人退出圈子,问最后留下的是原来第几号的人。
5星 · 资源好评率100%
很好,我明白了你的问题。以下是给出的 C 语言代码:
```c
int josephus(int n, int m){
int i, s = 0;
for(i = 2; i <= n; ++i)
s = (s + m) % i;
return s + 1;
}
```
这个函数实现了约瑟夫问题,经典的约瑟夫问题是指有 n 个人围成一圈,顺序排号,从第 1 个人开始报数,报到 m 的人出圈,接着从出圈的下一个人开始重新报数,直到剩下最后一个人。这个问题可以用递归和迭代两种方式来实现,这里给出的是迭代实现方式。
阅读全文