约瑟夫环的实现
约瑟夫环:n个人围成一个圆,从某一个人开始数数,规定一个条件值x,从1~x轮流报数,数到x的出队,然后从第二个人开始继续轮流报数,直到最终剩下一个人为止,这个人就是最终的胜利者。
代码:
#include<iostream>
using namespace std;
int main(){
int n,x,k,j=0,j0;
cout<<"输入总数目n:";
cin>>n;
int a[n][2];
cout<<"输入n个数;";
for(int i=0;i<n;i++){
cin>>a[i][0];
}
cout<<"输入判定条件x:";
cin>>x;
k=n;
cout<<"依次出队序列:";
while(n!=0){
int temp=x;
while(temp!=0){
j0=j;
if(a[j][1]!=1){
temp--;
}
j=(j+1)%k;
}
a[j0][1]=1;
cout<<a[j0][0]<<" ";
n--;
}
cout<<endl<<"第"<<j<<"个数"<<a[j0][0]<<"取胜!";
}