一排石頭的遊戲(取石頭)C語言實現

問題描述:

N塊石頭排成一行,每塊石頭有各自固定的位置。

兩個玩家依次取石頭,每個玩家可以取其中任意一塊石頭,或者相鄰的兩塊石頭,石頭在遊戲過程中不移位。

最後能將石頭一次取光的玩家獲勝。


C語言實現:

此處簡化,將石頭數設置爲5,用一個長度爲5的數組表示石頭,當元素值爲1的時候,代表有石頭。爲0時,代表沒有石頭。

#include<stdio.h>
//判斷當前條件下是否勝利
int ifWin(int array[])
{
	int sum=0;
	for(int i=0;i<5;i++)
		sum+=array[i];
	if(sum==0)
		return 1;
	else 
		return 0;
}
//取石頭操作
void getStone(int array[])
{
	//要取的石頭數(1個或2個)
	int num_get;
	int position=-1;
	int position_2=-1;
	printf("how many stones you want get (1 or 2):");
	scanf("%d",&num_get);
	printf("\n");
	if(num_get==1){
		printf("the position(1~5):");
		scanf("%d",&position);
		printf("\n");
		if(array[position-1]==1)
			//將當前位置的數組元素置爲0,表示已經取走石頭
			array[position-1]=0;
		else
			printf("please obey the rules!\n");
	}else if(num_get==2){
		printf("the positions(1~5) must touched:");
		scanf("%d,%d",&position,&position_2);
		printf("\n");
		if((array[position-1]==1)&&(array[position_2-1]==1))
		{
			array[position-1]=0;
			array[position_2-1]=0;
		}else{
			printf("please obey the rules!\n");
		}
			
	}else{
		printf("please obey the rules!\n");
	}
}
//打印當前遊戲狀況
void gameSituation(int array[])
{
	for(int i=0;i<5;i++)
		printf("%d ",array[i]);
	printf("\n");
}

int main()
{
	int a[5]={1,1,1,1,1};
	int flag=-1;
	while(1)
	{
		flag=ifWin(a);
		if(flag==1)
			break;
		gameSituation(a);
		getStone(a);
	}
	printf("You win!\n");
	return 0;
}



這個遊戲先取者有必勝方法:

先取者只需要取中間的石頭即可。

當石頭爲奇數時,取最中間的那顆石頭。

當石頭爲偶數時,取最中間的兩顆石頭。


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