C语言的约瑟夫环
时间: 2023-07-04 13:13:24 浏览: 58
以下是用C语言实现约瑟夫环的代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int val;
struct Node* next;
};
int josephus(int n, int m) {
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
head->val = 1;
struct Node* pre = head;
for (int i = 2; i <= n; i++) {
struct Node* cur = (struct Node*)malloc(sizeof(struct Node));
cur->val = i;
pre->next = cur;
pre = cur;
}
pre->next = head;
struct Node* cur = head, *pre2 = NULL;
while (cur->next != cur) {
for (int i = 1; i < m; i++) {
pre2 = cur;
cur = cur->next;
}
pre2->next = cur->next;
struct Node* tmp = cur;
cur = cur->next;
free(tmp);
}
int res = cur->val;
free(cur);
return res;
}
int main() {
int n = 5;
int m = 3;
printf("The last person left is at position: %d\n", josephus(n, m));
return 0;
}
```
注意:在使用动态内存分配函数malloc()和free()时,需要注意内存管理,避免出现内存泄漏。