2020-10-07

    科技2024-07-12  74

    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; }

    Processed: 0.017, SQL: 8