[c++求看代码]约瑟夫问题
#include<iostream>
using namespace std;
struct people
{
int num;
people*left;
people*right;
};
class circle {
public:
circle(){p1=new people;p1->left=NULL;p1->right=NULL;p1->num=0;sum=0;};
circle(int ssum);
people* out(int m,people*before);
void screen();
~circle(){delete p1;}
private:
people* p1;
int sum;
};
circle ::circle(int ssum)
{
sum=ssum;
p1=new people;
people *s=p1;
s->num=1;
p1->left=NULL;
for(int i=0;i<sum-1;i++)
{
people *r=new people;
r->num=i+2;
r->left=s;
s->right=r;
r->right=NULL;
s=r;
}
s->right=p1;
p1->left=s;
};
people* circle::out(int m,people*after)
{
int y=m%sum;
people*p=after->left;
for(int i=0;i!=y;i++)
{p=p->right;}
p->left->right=p->right;
p->right->left=p->left;
people*q=p->right;
delete p;
sum--;
return q;
};
void circle::screen()
{
int mm;
cout<<"请输入第m人出局:";
cin>>mm;
people*r=out(mm,p1);
for(int i=0;r!=r->left;i++)
{
r=out(mm,r);
}
cout<<r->num<<endl;
};
void main()
{
int i;
cout<<"请输入总人数:"<<endl;
cin>>i;
circle test(i);
test.screen();
}
//总人数和m值不同 有的就没有任何问题 有的就有问题 会显示要我调试 求问