巴什博弈
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了巴什博弈相关的知识,希望对你有一定的参考价值。
对于这个博弈,有一种经典的例题:
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");
以上是关于巴什博弈的主要内容,如果未能解决你的问题,请参考以下文章