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;
}
這個遊戲先取者有必勝方法:
先取者只需要取中間的石頭即可。
當石頭爲奇數時,取最中間的那顆石頭。
當石頭爲偶數時,取最中間的兩顆石頭。