利用循环链表解约瑟夫问题
#include <iostream>
using namespace std;
class Employee
{
private:
int number;
Employee* next;
public:
Employee(int n=0):number(n){};
int get_number(){return number;};
void set_next(int value){
next->number=value;
}
Employee * & get_next(){//返回值为指针的引用,使得返回值的指针可以被操作如访问、赋值等
return next;
}
void set_number(int i){number=i;};
};
Employee * CreateList(int m)
{
Employee * p,*q,*head;
head=new Employee;
p=head;
for(int i=1;i<=m-1;i++){
p->set_number(i);
q=new Employee();
p->get_next()=q;
p=q;
}
p->set_number(m);
p->get_next()=head;
return head;
}
void Joseph(Employee * CircleList,int m,int n)
{
Employee * p,*q;
p=CircleList;
for(int i=1;i<=m-1;i++){
for(int j=1;j<=n-2;j++){
p=p->get_next();
}
q=p->get_next();
p->get_next()=q->get_next();
delete q;
p=p->get_next();
}
cout<<p->get_number();
}
int main()
{
int m,n;
cin>>m>>n;
Employee * CircleList;
CircleList= CreateList(m);
Joseph(CircleList,m,n);
system("pause");
return 0;
}