1. 程式人生 > >一位陣列>>>>>>>>>>約瑟夫環

一位陣列>>>>>>>>>>約瑟夫環

約瑟夫環的故事被改變了很多版本,我的版本是監獄風雲:

在一個月高風黑的夜晚,監獄典獄長錘石決定將監獄的33個人處決,但是隻留下一個人活下去。他將犯人們圍成一個圈,從一號犯人開始,1號報數1,二號報數2,...以此類推,每次報到7的人槍決。 第一次七號犯人死亡,然後8號犯人繼續報數1,。。。。以此類推直到最後只剩一個人。而我們有著大智慧的約瑟夫將自己排到了最後活下來的位置,如若想知道位置,則看程式碼。

include<stdio.h>
#define MAX 33

int main(int argc, const char *argv[])
{
	int i,j,k;
	int sum=0;//用於計算七人
	int p=0;//用於計算存活人數
	int a[MAX]={0};
	for(i=0;i<MAX;i++)
	{
		k=i; 
		if(i==32)
		{
			i=-1;
		}//圍成圈

		if(a[k]==1) 
		{
			continue;
		}//死亡跳過

		sum++;
		if(sum%7==0)
		{
			sum = 0;
			a[k]=1;
			printf("%02d號犯人掛了\n",k+1);
		}//計算第七個人 到了7則置0

		for(j=0;j<MAX;j++)
		{
			if(a[j]==0) p++;
		}
		if(p==1) break;//活著的人為1個  跳出大迴圈 否則 p=0;重新進行下一輪迴圈計算
		else
			p=0;
	}

	for(i=0;i<MAX;i++)
		if(a[i]==0) printf("%d號犯人成功活下!!!!\n",i+1);
	return 0;
}

如上程式碼  

將33個犯人視為陣列,定義一個int型別含有33個元素的陣列。數組裡存放犯人的生死狀態,生為 0   ,死為1;

如上所示。