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);}