zoukankan      html  css  js  c++  java
  • 力扣(LeetCode)292. Nim游戏 巴什博奕

    你和你的朋友,两个人一起玩 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;
        }
    }
    

    运行结果

  • 相关阅读:
    volley框架使用
    Insert Interval
    candy(贪心)
    Best Time to Buy and Sell Stock
    Best Time to Buy and Sell Stock III
    distinct subsequences
    edit distance(编辑距离,两个字符串之间相似性的问题)
    trapping rain water
    word break II(单词切分)
    sudoku solver(数独)
  • 原文地址:https://www.cnblogs.com/lick468/p/10678250.html
Copyright © 2011-2022 走看看