Chomp!游戏
例1、有一个n*m的棋盘,每次可以取走一个方格并拿掉它右边和上边的所有方格。拿到左下角的格子(1,1)者输,那么谁会赢呢?
solve:除了n=m=1的情况,先手必赢。(右上角的方格特殊)
例2:有n张卡片,第i张纸片上写着数字i,每次可以取走一张纸片和数字是该纸片因数的纸片,那么谁会赢呢?
solve:除了n=1的情况,先手必赢。
例3、现在有一颗含n个节点的有根树,根节点是1,每个点初始时都为白色。每次可以把任意一个白色节点到根节点经过的所有的点(包括该节点)变成黑色。谁最后把整棵树染黑了,谁就输了。
solve: 除了n=1的情况,先手必赢。
Ferguson游戏
Describetion: 有两个盒子,分别装有m、n颗糖,表示(m,n)。每次清空一个盒子,然后将另一个盒子里的糖转移一些过来,并保证两个盒子至少各有一颗糖。最后进行转移糖者胜利,无法转移糖的人失败。
solve:——m、n都为奇数,先手必败
——m、n至少一个为偶数,先手必赢
样例:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2147
代码实现:
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n, m;
while(~scanf("%d %d", &n, &m))
{
if(n==0 && m==0)
break;
if(n%2==0 || m%2==0)
printf("Wonderful!\n");
if(m%2!=0 && n%2!=0)
printf("What a pity!\n");
}
return 0;
}
约数游戏
Describetion:桌子上有n个数字,1~n,两个人轮流选择一个桌上的数x,然后将x与x的约数都拿走,拿去最后一个数的人胜出(无法选择数字的人失败)。
solve: 先手必胜