C语言编写约瑟夫问题求解程序
约瑟夫问题是一个经典的数学问题,它的具体形式是:N个人围成一圈,依次编号从1到N,从第1个人开始报数,报到第M个人出列,然后从出列的下一个人开始重新报数,直到剩下最后一个人。请用C语言编写一个程序来求解约瑟夫问题。
我们可以采用循环链表这种数据结构来模拟这个过程。首先,我们定义一个结构体Node来表示每个人,其中包含3个属性:编号、报数值和指向下一个人的指针。然后,我们创建一个循环链表,将所有人依次加入其中。接着,我们从第一个人开始,不断报数,并将每次报到M的人从链表中删除。最后,当链表中只剩下一个人时,这个人就是约瑟夫问题的解。
下面是完整的C语言代码实现:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int num; // 编号
int count; // 报数值
struct Node *next; // 指向下一个人的指针
} Node;
Node *create(int n) { // 创建循环链表
Node *head = (Node *) malloc(sizeof(Node));
head->num = 1;
head->count = 1;
Nod