数据结构约瑟夫环问题代码使用C语言
时间: 2024-12-02 09:17:27 浏览: 24
数据结构约瑟夫环C语言代码实现
5星 · 资源好评率100%
约瑟夫环问题是这样一个经典问题:有n个人围成一圈,从第一个人开始报数,每次跳过k个人,如果数到第m个人,就将这个人移出圈子,并继续这个过程直到剩下最后一个人。在C语言中,可以使用数组和循环来解决这个问题。下面是一个基本的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 约瑟夫环问题函数
int josephus(int n, int k, int m) {
if (n == 1 || m == 1) // 如果只剩一个人或初始人数为1,直接返回1
return 1;
int array[n], i = 0;
for (i = 0; i < n; ++i)
array[i] = i + 1; // 初始化数组
while (n > 1) { // 当还有人时
for (i = 0; i < k - 1; i++) // 跳过k-1个人
i = (i + 1) % n;
// 将第m个人移除
if (array[i] == m)
n--;
else
i = (i + 1) % n;
// 移动到下一个位置
array[i] = (array[i] + 1) % n;
}
return array[0]; // 返回最后剩下的那个人的位置
}
int main() {
int n, k, m;
printf("Enter the number of people, skip count, and the position to remove: ");
scanf("%d%d%d", &n, &k, &m);
int result = josephus(n, k, m);
printf("The person who will be removed is at position %d\n", result);
return 0;
}
```
在这个代码中,我们首先创建了一个大小为n的数组来模拟每个人,然后通过循环依次按照规则移动和删除元素。当只剩下一人时,返回的就是结果。
阅读全文