#include<iostream>
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
}LNode,*LinkList;
void Josephus(int n,int k,int m)
{
if(n < 1)
{
cout<<"n is error"<<endl;
return;
}
if(k < 1 || k > n)
{
cout<<"k is error"<<endl;
return;
}
if(m < 1)
{
cout<<"m is error"<<endl;
return;
}
//循环链表的生成
LinkList head,p,q;
head = (LinkList)malloc(sizeof(LNode));
head->data = 1;
p = head;
for(int i = 2; i<=n; i++)
{
q = (LinkList)malloc(sizeof(LNode));
q->data = i;
p->next = q;
p = p->next;
}
p->next = head;
//循环链表建好
for(int j = 1; j<k; j++)
p = p->next;//p移动到开始位置前一位置
if(n == 1) cout<<"序号:"<<p->data<<endl;
else
{
int count = 0;
while((count++) < n-1)
{
for(int k=0;k<n-1;k++)
p = p->next;
q = p->next;
p->next = p->next->next;
cout<<q->data<<endl;
free(q);
}
cout<<p->data<<endl;
}
}
int main()
{
Josephus(4,5,2);
return 1;
}