#include <stdlib.h>
#include<iostream>
using namespace std;
struct CrLink
{
int Number; //编号
int Cipher;//密码
CrLink *next;//下一个节点
};
int main()
{
int n;
int m;
cout<<“please input how much people(n<=30)”<<endl;
cin>>n;
cout<<“please input the first”<<endl;
cin>>m;
CrLink *L;
int i;
//建立循环链表
CrLink *p;//移动指针
L=p=new CrLink ; //创建第一个节点
for(i=1;i<n;i++)//在该循环中构造剩余的n-1个节点
{
p->Number=i;
cout<<“输入第”<<i<<endl;
cin>>p->Cipher; //赋值
p->next=new CrLink;
p=p->next;
}
p->Number=i;
cout<<“输入第”<<i<<endl;
cin>>p->Cipher;
p=p->next=L;//结尾返回至第一个节点
//约瑟夫环问题
while(p->next!=p)
{
for(i=1;i<m;i++)//不断将p后移至m
p=p->next;
cout<<p->Number<<‘ ‘;//输出m的编码
m=p->Cipher;//改变m的值
CrLink *q=p;
while(q->next!=p)
{
q=q->next;//找到n前的节点
}
q->next=p->next;//跳过节点并删除
free(p);
p=q->next;
}
cout<<p->Number<<endl;//输出最后一个人的编码
free(p);//删除最后一个节点
return 0;
}