Nim Game

系统管理员 2021-03-28 14:06 578阅读 0赞

一、题目

  1、审题

  746986-20181125152459440-178925916.png

  2、分析

    你先选,能选 1~3个砖头,对手在选 1~3个砖头。若你和对手都很聪明,且能拿到最后一块砖头的人胜利,给出砖头总数 n,求你是否能赢。

二、解答

  1、思路

    由于是我们先拿,那么3个以内(包括3个)的石子,我们直接赢,如果共4个,那么我们一定输,因为不管我们取几个,下一个人一次都能取完。如果共5个,我们赢,因为我们可以取一个,然后变成4个让别人取,根据上面的分析我们赢,所以最终能留出 4 个给对手选,我们就能赢。列出1到10个的情况如下:

1 Win

2 Win

3 Win

4 Lost

5 Win

6 Win

7 Win

8 Lost

9 Win

10 Win

由此我们可以发现规律,只要是4的倍数个,我们一定会输,所以对4取余即可,参见代码如下:

  1. public boolean canWinNim(int n) {
  2. // return n % 4 != 0 ;
  3. return (n & 0b11) != 0;
  4. }

发表评论

表情:
评论列表 (有 0 条评论,578人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCode 292 Nim GameNim游戏)

    你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。 你们是聪明人,每一步都是最优解

    相关 Nim Game

    一、题目   1、审题   2、分析     你先选,能选 1~3个砖头,对手在选 1~3个砖头。若你和对手都很聪明,且能拿到最后一块砖头的人胜利,给出砖头总数 ...