leetcode292. Nim 游戏

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

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

示例:

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

思路:

如果堆中石头的数量 nn 不能被 4 整除,那么你总是可以赢得 Nim 游戏的胜利。

推理

让我们考虑一些小例子。显而易见的是,如果石头堆中只有一块、两块、或是三块石头,那么在你的回合,你就可以把全部石子拿走,从而在游戏中取胜。而如果就像题目描述那样,堆中恰好有四块石头,你就会失败。因为在这种情况下不管你取走多少石头,总会为你的对手留下几块,使得他可以在游戏中打败你。因此,要想获胜,在你的回合中,必须避免石头堆中的石子数为 4 的情况。

同样地,如果有五块、六块、或是七块石头,你可以控制自己拿取的石头数,总是恰好给你的对手留下四块石头,使他输掉这场比赛。但是如果石头堆里有八块石头,你就不可避免地会输掉,因为不管你从一堆石头中挑出一块、两块还是三块,你的对手都可以选择三块、两块或一块,以确保在再一次轮到你的时候,你会面对四块石头。

显然,它以相同的模式不断重复 n=4,8,12,16…,基本可以看出是 4 的倍数。

class Solution {public boolean canWinNim(int n) {return (n % 4 != 0);}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:16---强制类型转换和类型转换

旧式的强制类型转换 在早期C/C++中,显式地进行强制类型的转换有以下两种形式:type (expr) ; //函数形式的强制类型转换(type) expr; //C语言风格的强制类型转换比如: char c = 12; int b = (int)c; float f = float(b); C++的新式强制类型转换…

Nginx不停机优雅升级

最近线上运行的游戏越来越多,云服务商也给我推送提示系统升级,漏洞补丁升级,也有nginx更新的。 有一些比较关键性的系统补丁需要立即更新处理,有一些可以换一换不用升级,但此nginx升级的需求比较迫切,但更新可能需要重启nginx。 这将会影响到我们这样的一个登录业务逻辑…

leetcode186. 翻转字符串里的单词 II

给定一个字符串,逐个翻转字符串中的每个单词。 示例: 输入: ["t","h","e"," ","s","k","y"," ","i","s"," ","b","l…

Nginx大规模并发原理

Nginx在主流硬件上的并发数为十万,网络处理方面的领先地位,归功于突破性的事件驱动架构。 Nginx在每颗内核上创建一个工作进程,有效利用硬件资源。 在单个工作进程中交替处理多个连接,应对突如其来的网络流量。 Nginx资源管理 Nginx使用状态机管理流量。 非阻塞事件…

使用 CXF 做 webservice 简单例子

转:http://www.cnblogs.com/frankliiu-java/articles/1641949.html Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring …

老司机整理对Nginx性能优化

Nginx性能优化应遵循一个原则:一次只调整一项,调整不理想,将修改还原。 Linux参数 Nginx很多功能直接使用操作系统实现,操作系统决定nginx上限。 现代linux内核(2.6+)涵盖了大多应用场景,查看linux内核日志,找出参数过低的提示消息,根据建议调整。 连接队列 若传入…

leetcode189. 旋转数组

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [1,2,3,4,5,6,7] 和 k 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 示例 2: 输…

Nginx 配置UDP负载均衡

Nginx 1.9.13开始支持UDP负载匀衡,现代应用通常使用多种协议,很多核心Internet协议都早于HTTP,支持UDP势在必行。 UDP常用于非事务性的轻量级协议,如:DNS、syslog、RADIUS。 这些协议对可靠性没有严格要求&#xff0…

leetcode191. 位1的个数

编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。 示例 1: 输入:00000000000000000000000000001011 输出:3 解释:输入的二进制…

Nginx location执行顺序和匹配规则

nginx location执行顺序和匹配原则根据location的特点分为普通和正则两种,执行顺序和匹配规则的差异也在于此。 执行顺序 nginx会优先执行普通location,不管普通location是否匹配,都会再次转向执行正则location,一旦第一个正则location被满足,则停止向后执行。 匹配原则…

Nginx 配置TCP负载均衡

Nginx从1.9.0版本开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等鉴于Nginx在负载均衡和web service上的成功,和Nginx良好的框架,stream模块前景一片光明。 Nginx的stream模块默认不会自带安装,需要编译安装的时候手动添加上这个模块,不过我的系…

leetcode162. 寻找峰值 变种二分见过吗

峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] nums[n] -…

(十九)TCPIP面试宝典-进入大厂必备总结(上)

TCP 作为传输层的协议,是一个IT工程师素养的体现,也是面试中经常被问到的知识点。在此,我将 TCP 核心的一些问题梳理了一下,希望能帮到各位。 实际上这篇文章相当于是复习之前的网络基础部分。只不过这篇文章的提问方式更灵活,也是让读者们懂得变通,更熟悉TCP。 TCP 和 U…

leetcode348. 判定井字棋胜负 好麻烦的代码

请在 n n 的棋盘上,实现一个判定井字棋(Tic-Tac-Toe)胜负的神器,判断每一次玩家落子后,是否有胜出的玩家。 在这个井字棋游戏中,会有 2 名玩家,他们将轮流在棋盘上放置自己的棋子。 在实现这…

C++:17---sizeof运算符

功能:以字节位单位,返回一个表达式或一个数据类型所占的字节数返回值类型:是size_t类型sizeof有无括号:sizeof不加括号,后面不可以直接跟数据类型sizeof加括号,后面既可以跟表达式也可以跟数据类型注意事项对引用类型执行sizeof运算得到被引用对象所占空间的大小对指针执…

leetcode345. 反转字符串中的元音字母

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leetcode" 输出: "leotcede" 说明: 元音字母不包含字母"y"。 思路&#xff1a…

Redis:10---List对象

一、列表对象概述列表类型是用来存储多个有序的字符串,一个列表最多可以存储多个元素。列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有很多应用场景特点:一个列表可以存储多个字符串,相同元素…

Redis:09---Hash对象

一、哈希对象简介几乎所有的编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组哈希又称散列在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value{{field1,value1}&#xff0c…

leetcode329. 矩阵中的最长递增路径

给定一个整数矩阵,找出最长递增路径的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。 示例 1: 输入: nums [ [9,9,…

Query Ajax 实例 ($.ajax、$.post、$.get)

Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作,不用考虑浏览器的诧异了。 推荐一篇不错的jQuery Ajax 实例文章,忘记了可以去看看,地址为:http://www.cnblogs.com/yeer/a…