2020-10-07

C++数据结构约瑟夫环问题

设有编号为1,2,…,n的n个人围成一个圈,给定一个密码m,从第一个人开始报数,报到m是停止报数,报m的人出圈,再从他的下一个起重新报数,报到m时停止报数,报m的出圈,…,如下下去,直到所有人全部出圈为止。键盘输入n和m的值,请设计程序输出n个人出圈的次序。
#include
using namespace std;
struct Node{
int data;
struct Node *next;
};
class JosephRing{
public:
JosephRing(int n);
void Joseph(int m);
private:
Node *rear;
};
JosephRing::JosephRing(int n){
Node *s=NULL;
rear=new Node;
rear->data=1;
rear->next=rear;
for(int i=2;i<=n;i++){
s=new Node;
s->data=i;
s->next=rear->next;
rear->next=s;
rear=s;
}
}
void JosephRing::Joseph(int m){
Node *pre=rear,*p=rear->next;
int count=1;
while(p->next!=p){
if(count<m){
pre=p;p=p->next;
count++;
}
else{
cout<data<<"";
pre->next=p->next;
delete p;
p=pre->next;
count=1;

	}
}
cout<<p->data<<"";
delete p;

}
int main(){
int n,m;
cin>>n;
cin>>m;
JosephRing R(n);
R.Joseph(m);
return 0;
}


版权声明:本文为m0_46468352原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。