#include <iostream.h>
template <class T>
struct Node
{
T data;
Node<T>* next;
};
template <class T>
class LinkList
{
public:
LinkList();
LinkList(int n);
void Output(int m,int n);
void PrintList();
private:
Node<T> *rear;
};
template <class T>
LinkList<T>::LinkList()
{
rear=new Node<T>;
rear->next=rear;
}
template <class T>
LinkList<T>::LinkList(int n)
{
Node<T> *g,*s;
g=rear;
for(int i=1;i<n;i++)
{
s=new Node<T>;
s->data=i;
g->next=s;
g=s;
}
rear->data=n;
g->next=rear;
}
template <class T>
void LinkList<T>::Output(int m,int n)
{
T x;
Node<T> *p,*q;
p=rear;
cout<<"出圈编号的次序如下:"<<endl;
while(n!=1)
{
for(int i=1;i<m;i++)
{
p=p->next;
q=p->next;
}
x=q->data;
cout<<x<<" ";
p->next=q->next;
n--;
delete q;
}
cout<<"最终获胜者是第:"<<" "<<p->data<<" "<<"个人"<<endl;
delete p;
}
template <class T>
void LinkList<T>::PrintList()
{
Node<T> *p;
p=rear->next;
cout<<"参加游戏的人如下:"<<endl;
while(p!=rear)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<p->data<<endl;
}
void main()
{
int m,n;
cout<<"约瑟夫游戏开始,请输入参与游戏的总人数n:"<<endl;
cin>>n;
cout<<"请输入密码m"<<endl;
cin>>m;
LinkList<int>s1(n);
s1.PrintList();
s1.Output(m,n);
}
之前一直想用链表做这个,代码还不是很好,虽然做出来了可是功能不是很满意,有待改进。