码迷,mamicode.com
首页 > 其他好文 > 详细

力扣(LeetCode)292. Nim游戏 巴什博奕

时间:2019-04-09 18:33:59      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:turn   示例   mic   输入   als   情况   solution   --   http   

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

你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。

示例:

输入: 4
输出: false
解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;
因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。

解析 这是巴什博奕 n=k*(m+1)+r n是要报的数,m是最多能报的数,1是最少能报的数,r是决定先手赢和后手赢得关键。
例如 A和B报数,每个人报数最小1,最大4,看谁先报到30。
A报1,B就报5-1=4
A报2,Bj就报5-2=3
A报m, B就报5-m
如果是30的话,B如此报法稳赢。
如果是31的话,A就稳赢。

Java版

class Solution {
    public boolean canWinNim(int n) {
        if(n%4==0) {
            //后手赢
            return false;
        }
        //先手赢
        return true;
    }
}

运行结果

技术图片

力扣(LeetCode)292. Nim游戏 巴什博奕

标签:turn   示例   mic   输入   als   情况   solution   --   http   

原文地址:https://www.cnblogs.com/lick468/p/10678250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!