#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct LNode{//结构体的定义
int id;
int passw;
struct LNode *next;
}LNode,*LinkList;
void CreateLinkList(LinkList &L){//创建一个链表同时把每个小孩子的密码输进去。
cout<<"有几个小孩子?"<<endl;
int n,j=0;
cin>>n;
L=(LinkList)malloc(sizeof(LNode));
LinkList p,r=L;
cout<<"依次输入小孩子们手里的密码"<<endl;
while(j<n){
p=(LinkList)malloc(sizeof(LNode));
cin>>p->passw;
p->id=++j;
p->next=NULL;
r->next=p;
r=p;
}
r->next=L->next;
cout<<"succcess"<<endl;
}
void JosephCircle(LinkList &L){//处理约瑟夫问题
cout<<"请先输入一个报数的上限值:"<<endl;
int m;
cin>>m;
cout<<"小孩子们按照以下顺序出列:"<<endl;
LinkList p=L,q;
while(p->next){
for(int i=1;i<m;i++){
p=p->next;
}
cout<<p->next->id<<" ";
m=p->next->passw;
q=p->next;
p->next=p->next->next;
free(q);
if(p->next==p){
cout<<p->id<<endl;
break;
}
}
cout<<"完毕"<<endl;
}
int main(int argc, char* argv[])//主函数
{
LinkList mylist;
CreateLinkList(mylist);
JosephCircle(mylist);
return 0;
}