用c语言编程约瑟夫环问题处理
时间: 2024-02-10 13:10:40 浏览: 24
好的,以下是用 C 语言编写的约瑟夫环问题处理代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
struct Node* createList(int n) {
struct Node *head, *prev, *cur;
head = (struct Node*) malloc(sizeof(struct Node));
prev = head;
for (int i = 1; i <= n; i++) {
cur = (struct Node*) malloc(sizeof(struct Node));
cur->data = i;
prev->next = cur;
prev = cur;
}
prev->next = head->next;
free(head);
return prev->next;
}
void josephus(int m, struct Node* head) {
struct Node *prev, *cur;
prev = head;
cur = head->next;
while (cur != prev) {
for (int i = 1; i < m; i++) {
prev = cur;
cur = cur->next;
}
prev->next = cur->next;
printf("%d ", cur->data);
free(cur);
cur = prev->next;
}
printf("%d\n", cur->data);
free(cur);
}
int main() {
int n, m;
printf("请输入总人数 n 和报数 m:");
scanf("%d %d", &n, &m);
struct Node* head = createList(n);
josephus(m, head);
return 0;
}
```
代码实现的大致思路是:首先创建一个循环链表,然后按照约瑟夫环的规则,每次删除第 m 个结点,直到只剩一个结点为止。