#include <iostream>
using namespace std;
typedef int ElemType;
struct NodeType
{
ElemType data;
NodeType *next;
};
void josephus(int n,int m,int k)
{
NodeType *p,*q,*Head;
Head=new NodeType;
p=Head;
for (int i=1;i<=n-1;i++)
{
p->data=i;
p->next=new NodeType;
p=p->next;
}
p->data=n;
p->next=Head;
p=Head;
while (p->data!=(p->next)->data) //p->data==(p->next)->data表示只剩下一个结点
{
while(p->data!=k)//寻找编号为k的结点
p=p->next;
if (m==1)
{
for (int i=1;i<n;i++)
{
cout<<p->data<<'\t';
p=p->next;
}
cout<<endl;
return;
}else{
for(int i=1;i<m;i++)//开始报数
{p=p->next; }//找到报m-1的结
}
q=p->next;//q为报m的结点
cout<<q->data<<"\t";//输出报m结点的值
k=(q->next)->data;//k为下一个报数的起点
p->next=q->next;//删除报m的结点
}
cout<<p->data<<endl;//输出最后一个结点的值
}
using namespace std;
typedef int ElemType;
struct NodeType
{
ElemType data;
NodeType *next;
};
void josephus(int n,int m,int k)
{
NodeType *p,*q,*Head;
Head=new NodeType;
p=Head;
for (int i=1;i<=n-1;i++)
{
p->data=i;
p->next=new NodeType;
p=p->next;
}
p->data=n;
p->next=Head;
p=Head;
while (p->data!=(p->next)->data) //p->data==(p->next)->data表示只剩下一个结点
{
while(p->data!=k)//寻找编号为k的结点
p=p->next;
if (m==1)
{
for (int i=1;i<n;i++)
{
cout<<p->data<<'\t';
p=p->next;
}
cout<<endl;
return;
}else{
for(int i=1;i<m;i++)//开始报数
{p=p->next; }//找到报m-1的结
}
q=p->next;//q为报m的结点
cout<<q->data<<"\t";//输出报m结点的值
k=(q->next)->data;//k为下一个报数的起点
p->next=q->next;//删除报m的结点
}
cout<<p->data<<endl;//输出最后一个结点的值
}