Leetcode:292. Nim Game 是否能赢得比赛

题目:You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.

Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.

For example, if there are 4 stones in the heap, then you will never win the game: no matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend.
题目的意思是:你和你的朋友一起玩下面的Nim游戏:桌上有一堆石头,每次你们轮流去掉1到3块石头。去掉最后一块石头的人将是胜利者。你会采取第一回合去除石头。

你们两个都很聪明,并且有最佳的游戏策略。写一个函数,以确定是否可以赢得游戏给定堆中的宝石数量。

例如,如果堆中有4块石头,那么你永远不会赢得比赛:无论你去掉1,2或3块石头,最后一块石头总是被你的朋友删除。
分析过程写在代码里面:

     /**
     * 其实这个题仔细思考非常的简单
     * 由于Nim先拿,所以考虑以下的情况
     * 1颗 Win
     * 2颗 Win
     * 3颗 Win
     * 4颗 Failed
     * 5颗 先拿1颗 剩余4颗 转换对手 对方Failed Nim:Win
     * 6颗 先拿2颗 剩余4颗 转换对手 对方Failed Nim:Win
     * 7颗 先拿3颗 剩余4颗 转换对手 对方Failed Nim:Win
     * 8颗 不论拿一二三颗的哪一种情况 剩下 7 6 5颗的情况都为下一对手会赢的情况
     * Summary: 所以赢的条件是n%4!=0
     * @param n
     * @return
     */
    public boolean canWinNim(int n) {
        return n%4!=0;
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值