拈遊戲

1、問題描述
    有一堆n個棋子,兩個玩家輪流從堆中拿走1到m個棋子,每次拿走的棋子數都可以不同,但能拿走的上下限不變。如果每個玩家都做出了最佳的選擇,第一個玩家在n爲多少時會勝利。


 

2、代碼

/*+++++++++++++++++++++++++++++
+    拈遊戲
+
+author:zhouyong                2013-5-1 21:34
++++++++++++++++++++++++++++++++*/
#include <stdio.h>

bool win(int n,int m);
int main()
{
	int n,m;
	while(1)
	{
		scanf("%d%d",&n,&m);
		printf("%d \n",win(n,m));
	}
	
	return 0;
}

bool win(int n,int m)
{
	bool f=0;
	n%=(m+1)*2;//這個地方的週期是自己憑感覺猜的。
	if(n>=1&&n<=m)
		return true;    //贏的條件。
	else
	{
		for(int i=1;i<=m;i++)
			if(n>=i)
				f+=!win(n-i,m);//遞歸使自己取球后,儘量使對方不能贏。
		return f;
	}
}

 

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