巴什博弈

对于这个博弈,有一种经典的例题:

1.只有一堆数量为n的石子;

2.只有两个人参与这个游戏;

3.两个人轮流取1--m个石子;

4.最先取完石子的人赢;

 

输出:

如果先手赢,输出1,否则输出0;

 

题解:

如果n=m+1,因为最多取m个。所以先手不论取多少个,后手都能一次拿完。

  所以,要想先手赢 n=(m+1)*r+s,(r为自然数,s为1--m).

那么先手拿走s个,后手拿走1--m个,,,那么先手肯定获胜。总之要给对手留下 m+1个的倍数,,先手就能获胜。

于是只要判断 n%(m+1)是否等于0。

如果等于0,那么无论先手怎么取,都会输。

 

1 int n,m;
2 if(n%(m+1))
3     printf("0\n");
4 else
5     printf("1\n"); 

 

posted @ 2017-05-01 13:50  ouyang_wsgwz  阅读(543)  评论(0编辑  收藏  举报