“山中無老虎,猴子稱大王”:一羣猴子圍坐成一圈,每隻猴子都按順序編有一個號,確定從其中選定一個猴王。(約瑟夫環)

#include<stdio.h>
void number(int a[],int n,int t,int num);         //超過100就崩潰............
int dele(int a[],int n,int t);
int main()
{
	int n,i,t,num; //n爲當前猴子數量,i作爲中間量,t爲猴子總量 
	int a[100];
	num=1;
	printf("請輸入猴子數量!\n");
	scanf("%d",&t);
	n=t;
	while(n!=1)	
	{
		number(a,n,t,num);
		n=dele(a,n,t);
		for(i=t-1;i>0;i--)
		{
			if(a[i]!=-1)
			{ //爲下一次報數做準備 
				if(a[i]==1)
				num=2;
				else if(a[i]==2)
				num=3;
				break; 
			}
		}
	}
	for(i=0;i<t;i++)
	{ //查找大王 
	if(a[i]!=-1)
	break;
	}
	printf("猴子%d當大王\n",i+1);
	return 0;
}
void number(int a[],int n,int t,int num)
{ //對猴子編號的函數 
	int i;
	for(i=0;i<t;i++)
	{
		if(a[i]==-1)
		continue;
		a[i]=num;
		if(num==3)
		{
			num=1;
		}
		else num++;
	}
}
int dele(int a[],int n,int t)
{ //對報數爲3的猴子賦值爲-1,並更改當前猴子數量的函數 
	int i;
	for(i=0;i<t;i++)
	{
		if(a[i]==3)
		{
			a[i]=-1;
			n--;
		}
	}
	return n;
}

 

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