zoukankan      html  css  js  c++  java
  • Leetcode 292. Nim 游戏

    地址 https://leetcode-cn.com/problems/nim-game/

    你和你的朋友,两个人一起玩 Nim 游戏:
    桌子上有一堆石头。
    你们轮流进行自己的回合,你作为先手。
    每一回合,轮到的人拿掉 1 - 3 块石头。
    拿掉最后一块石头的人就是获胜者。
    假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。
    如果可以赢,返回 true;否则,返回 false 。
    
    
    示例 1:
    输入:n = 4
    输出:false 
    解释:如果堆中有 4 块石头,那么你永远不会赢得比赛;
         因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。
    
    示例 2:
    输入:n = 1
    输出:true
    
    
    示例 3:
    输入:n = 2
    输出:true
    

    解答
    这个是博弈题目的入门题目。
    根据题目描述可得,若堆中只剩4个石头,则当前选手必输。

    同样的向上推一个回合,若堆中有 4+1 ~~~ 4+3个石头,则对手可以取走1到3个石头,使得下一回合堆中只剩4个石头,则下一轮选手必输
    1回合 堆中5~7个石头 A取走1~3个石头
    2回合 堆中4个石头 B必输

    向上推一个回合,若堆中有 4+4个石头,则当前回合无论上一回合选择如何取石头,当前回合肯定剩下4+x是否,那么当前回合选择就取走x块是否,则必胜
    1回合 堆中8个石头 A取走1~3个石头
    2回合 堆中5到7个石头 B必胜

    以此类推,胜负的关键就是当前的石头数是否是4的倍数

    class Solution {
    public:
        bool canWinNim(int n) {
            return n%4;
        }
    };
    
  • 相关阅读:
    测试一下你的T-SQL基础知识-count
    测试一下你的T-SQL基础知识-subquery
    Microsoft SQL Server 2012 管理 (2): Auditing
    Webpack
    react
    Webpack 傻瓜式指南(一)
    谈谈react-router学习
    使用Flexible 实现手淘H5 页面的终端适配学习
    Promise 让异步更优
    基于LeanCloud云引擎的Web全栈方案
  • 原文地址:https://www.cnblogs.com/itdef/p/15524294.html
Copyright © 2011-2022 走看看