用C语言实现:有n个人围成一圈,顺序排号,从第r个人开始报数(从1到m报数),凡是报m的人退出圈子,如此循环; 输入n,r,m(以空格区分) 要求输出最后剩下的是原来第几号哪位。
时间: 2024-02-24 11:57:12 浏览: 20
好的,以下是用C语言实现约瑟夫问题的代码:
```c
#include <stdio.h>
int josephus(int n, int r, int m) {
// 建立一个长度为n的数组,用于存放每个人的编号
int nums[n];
for (int i = 0; i < n; i++) {
nums[i] = i + 1;
}
// 从第r个人开始报数
int i = r - 1;
// 循环直到只剩下一个人
while (n > 1) {
// 报数到m的人出圈
i = (i + m - 1) % n;
for (int j = i; j < n - 1; j++) {
nums[j] = nums[j + 1];
}
n--;
}
// 返回剩下的最后一个人的编号
return nums[0];
}
int main() {
int n, r, m;
printf("请输入n, r, m:");
scanf("%d %d %d", &n, &r, &m);
int result = josephus(n, r, m);
printf("剩下的是原来第%d号哪位\n", result);
return 0;
}
```
这个函数的实现和上面的Python函数思路是一样的,只是用了数组来存放每个人的编号,以及用了for循环来实现出圈。