n个人围成一圈编号为1~n的结点 编号为k的结点进行1~m 报数 数到第m人出圈 输出出圈人的次序
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct node
{
int data;
struct node * next;
}Lnode;
void Josephus(int n,int m,int k)
{
int i = 0;
Lnode *q = NULL;
Lnode *p = NULL;
p = (Lnode *)malloc(sizeof(Lnode));
q = p;
for(i = 1;i < n;i++)
{
q->data = k;
k = k%n + 1;
q->next = (Lnode *)malloc(sizeof(Lnode));
q = q->next;
}
q->data = k;
q->next = p;
while(p->next != p)
{
for(i = 1;i < m; ++i)
{
q = p;
p = p->next;
}
q->next = p->next;
printf("%d ",p->data);
free(p);
p = q->next;
}
printf("%d\n",p->data);
}
int main(int argc,char argv)
{
int n = 0,m = 0,k = 0;
printf("数据结点数n,删除报号结点m,报号起点编号k\n");
scanf("%d%d%d",&n,&m,&k);
Josephus(n,m,k);
return 0;
}