用數組模擬求解約瑟夫環問題

【問題描述】

約瑟夫問題:n個人圍成一圈,從第一個人開始報數,數到m的人出圈;再由下一個人開始報數,數到m的人出圈;…輸出依次出圈的人的編號。n,m由鍵盤輸入。

 

【程序代碼】

#include<iostream>
using namespace std;
int a[100];
int main()
{
	int n,m;
	cin>>n>>m; //n個人,報到m出圈
	int pos=0,sum=0,out=0; //pos:每個人最初的序號,sum:保存計數,out:出圈人數 
	for(;out!=n;) {
		pos++;
		if(pos==n+1) pos=1;
		if (a[pos]==0) ++sum;	//第pos個位置上有人則報數
		if (sum==m) {	//當前報的數是m
			sum=0;		//計數器清零
			cout<<pos<<" ";	//輸出出圈人的編號
			a[pos]=1;	//此處的人已出圈,設置爲空
			out++;	//出圈的人數增加一個
		}	 
	}
	return 0;
}

/*
in:
10 3

out:
3 6 9 2 7 1 8 5 10 4
*/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章