数组实现约瑟夫环

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=1000;
int main(){
	string name[maxn];//创建字符串数组保持参与人的名字 
	int p[maxn];
	int n,i;
	cin>>n;
	for(i=0;i<n;i++)
	cin>>name[i];
	int w,s;//w为开始的人的编号,s为数到第s个人,他出局 
	for(i=0;i<n;i++){
		p[i]=i;//参与人的编号 
	}
	cin>>w>>s;
	w=(w+n-1)%n;
	do{
		w=(w+s-1)%n;//对n取余就知道谁出局了自己想为什么,因为下标从0开始所以减一 
		cout<<name[p[w]]<<endl;//出局的那个人 
		for(i=w;i<n-1;i++)
		p[i]=p[i+1];//数组很low的地方就是这里,为了去掉出局的人需要把他后面的人的位置往前挪 ,很浪费时间很麻烦
		if(n==1) cout<<name[p[w]]<<" Win!\n";//最后的赢家 
	}while(n--);
	return 0;
}
posted @ 2018-10-07 14:52  ChunhaoMo  阅读(410)  评论(0)    收藏  举报