Posts 【算法解忧】智者夺魁游戏
Post
Cancel

【算法解忧】智者夺魁游戏

智者夺魁游戏

有个很有趣的游戏,我们称为智者夺魁游戏,游戏玩法如下:

桌上有N个弹珠,每次只能从中拿出1到3个弹珠,最后拿完桌上弹珠的人获胜

现在有如下问题:

现在有A、B两同学,A同学先开始从一堆弹珠中拿,如果希望A获胜,则弹珠个数N是满足什么条件?

这个问题,我们不妨来分类讨论下:

CASE1. 假设桌上有N个弹珠(N<4),A先拿,A肯定全拿完,无论如何都是A胜出(别跟我说A会手下留情);

CASE2. 假设桌上有N个弹珠(N=4),A先拿,A无论怎么拿都会留机会给B,让B胜出;

CASE3. 假设桌上有N个弹珠(4<N<8),A先拿,A想胜出,必然不能把CASE2的情况留给自己开始,所以A会拿的只剩下4个弹珠让B开始,A会胜出;

CASE4. 假设桌上有N个弹珠(N=8),A先拿,无论A怎么拿,B都会把CASE2的情况留给A,所以B会胜出;

…….

以此类推: 只要是4的倍数,A先出手,在B非常机智的情况下,A是不可能赢的…

Code

1
2
3
4
5
public boolean winNum(int N){

    return N%4 != 0;

}

This post is licensed under CC BY 4.0 by the author.