https://blog.csdn.net/m_hahahaha1994/article/details/51742453
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>typedef struct Node
{int num;struct Node *next;
}LinkList;LinkList *creat(int n)
{int i = 1;LinkList *p,*q,*head;p = (LinkList*)malloc(sizeof(LinkList));p->num = i;head = p;for(i = 2;i<=n;i++){q = (LinkList*)malloc(sizeof(LinkList));q->num = i;p->next = q;p = q;//p->next = head;}p->next = head;return head;}void fun(LinkList *L,int k,int m)
{int i,j;LinkList *p,*q,*s;p = L;for(i = 1;i<k;i++){q = p;p = p->next;}while(p->next!=p){for(j = 1;j<m;j++){q=p;p = p->next;}printf("%5d",p->num);s = p;q->next = p->next;p = p->next;free(s);}printf("%5d",p->num);
}void main()
{LinkList *L;int n,k,m;n = 9;m = 4;k = 2;L=creat(n);fun(L,k,m);}