推理题,会则秒解

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

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

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

这道题是一道纯推理题,最红的结果是,如果剩余 n 为 4 的倍数,则,先手必输,否则先手必赢。为什么呢?

其实很简单,如果剩余 4,则无论先手如何取,剩余都会在 1-3 之间,后手可以一次取完,结局注定失败!

所以,如果此时,剩余数量为 4 的倍数,则无论先手如何取,后手都可以控制每次递减的数为 4。

而如果先手时,数量为 4n + k, 1 <= k <=3,则先手可以直接将 k 去掉,剩余 4n,后手在取石头的时候,面临的是 4n,则其必输。

代码如下

class Solution {
public:bool canWinNim(int n) {if (n % 4 == 0) {return false;} else {0return true;}}
};

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

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

相关文章

【图论】割点、桥、双连通

连通分量 个数可以通过一次BFS或者DFS得到 割点和桥 可以枚举删除每一个点或者每一条边&#xff0c;判断连通分量个数是否增加 更好的方法 该算法是R.Tarjan发明的。对图深度优先搜索&#xff0c;定义DFS(u)为u在搜索树&#xff08;以下简称为树&#xff09;中被遍历到的次序号…

奇酷手机显示Log

1、在桌面点击拨号&#xff0c;在拨号盘输入“*20121220#”&#xff0c;进入工程模式;2、看到日志输出等级&#xff0c;点进去 Log print enable 选 enable Java log level 选 LOGV C and C log level 选 LOGV Kernel log level 选 KERN_DEBUG3、完毕 参考网址&#xff1a;http…

getCanonicalPath getAbsolutePath区别

1、在winows环境下它们的区别是 &#xfeff;&#xfeff;getCanonicalPath是标准路径&#xff0c;没有特殊字符&#xff0c;getAbsolutePath是有特殊字符的 2、在AIX系统中它们的区别&#xff1a; 首先编译&#xff1a;javac com/ai/test/BugTest.java 然后运行&#xff1a;ja…

Hbase与hive整合

//hive与hbase整合create table lectrure.hbase_lecture10(sname string, score int) stored by org.apache.hadoop.hive.hbase.HBaseStorageHandler whth serdeproperties("hbase.columns.mapping" :key,cf1:score)tblproperties("hbase.table.name" &q…

C++实现一个http服务器

一个简单的博客后端服务器 github地址&#xff0c;持续更新 设计参考 #define MYSQLPP_MYSQL_HEADERS_BURIED #include "httplib.h" #include "rapidjson/document.h" #include <mysql/mysql.h> #include <iostream> #include <string>…

KMP算法的java实现

package com.trs.utils;public class KMPStr {/** 在KMP算法中&#xff0c;最难求的就是next函数&#xff0c;如何理解next函数是一个难题&#xff0c;特别是knext[k]&#xff0c;这里* 需要指出的是当p[i]!p[j]时&#xff0c;我们只有通过回溯将k的值逐渐减小&#xff0c;貌似…

线段分割法实现微信抢红包

无意间看到的一种实现抢红包的方法&#xff0c;于是用C实现了一下。 将一个红包分成 n 份 具体的思路是&#xff0c;将一个红包看作是一个线段&#xff0c;线段的长就是红包总金额&#xff0c;然后在这个线段上随机切 n-1 刀&#xff0c;分成 n 份&#xff0c;然后抢红包的人依…

JAVA多线程和并发基础面试问答(转载)

JAVA多线程和并发基础面试问答 原文链接&#xff1a;http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-answers/ 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里&#xff0c;从面试的角度列出了大部分重要的问题&#xff0c…

Linux的学习--crontab

之前了解过一点crontab&#xff0c;前段时间比较闲&#xff0c;就熟悉了一下&#xff0c;今天总结记录一下。 crontab命令常见于Unix和类Unix的操作系统之中&#xff0c;用于设置周期性被执行的指令。该命令从标准输入设备读取指令&#xff0c;并将其存放于"crontab"…

C++雪花算法实现

看来一下雪花算法的实现方法&#xff0c;用 c试着实现了一下&#xff0c;这里仅仅是实现了算法的流程&#xff0c;但是具体的细节&#xff0c;如并发、多线程访问等等没有具体考虑。 雪花算法的简单讲解参考 #include <sys/select.h> #include <iostream> #includ…

CAlayer层的属性

iOS开发UI篇—CAlayer层的属性 一、position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性&#xff1a;position和anchorPoint property CGPoint position; 用来设置CALayer在父层中的位置 以父层的左上角为原点(0, 0) property CGPoint anchorPoint; 称为“定位点”、…

Window Linux下实现指定目录内文件变更的监控方法

转自&#xff1a;http://qbaok.blog.163.com/blog/static/10129265201112302014782/ 对于监控指定目录内文件变更&#xff0c;window 系统提供了两个未公开API&#xff1a;SHChangeNotifyRegister SHChangeNotifyDeregister 分别用于注册Notify以及监视。 同时&#xff0c;还提…

Odoo9发行说明

2015年10月1日&#xff0c;期待已久的Odoo9正式发布。本文是Odoo9正式版发行说明&#xff0c;基于官网资料翻译。 译者: 苏州-微尘原文地址&#xff1a;https://www.odoo.com/page/odoo-9-release-notes译文地址&#xff1a;http://blog.csdn.net/wangnan537/article/details/4…

揭秘史上最完美一步到位的搭建Andoriod开发环境

Windows环境下Android开发环境搭建虽然不难而且网上资料众多&#xff0c;但是众多资料如出一折 忽略了很多细节&#xff0c;最终还是没能达到满意效果。 基本步骤如下&#xff1a;JDK安装、环境变量配置、Eclipse下载、AndoriodSDK下载安装、下载配置ADT但是到这里还不算完美搞…

基于OpenCv的人脸检测、识别系统学习制作笔记之二

在网上找到了一个博客&#xff0c;里面有大量内容适合初学者接触和了解人脸检测的博文&#xff0c;正好符合我目前的学习方面&#xff0c;故将链接放上来&#xff0c;后续将分类原博客的博文并加上学习笔记。 传送门&#xff1a; http://blog.sina.com.cn/s/articlelist_160256…

URL 化

URL化。编写一种方法&#xff0c;将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符&#xff0c;并且知道字符串的“真实”长度。&#xff08;注&#xff1a;用Java实现的话&#xff0c;请使用字符数组实现&#xff0c;以便直接在数组上操作。&#xf…

第一章 00 StringUtil.cpp和StringUtil.hh分析

1 /*2 * StringUtil.hh3 *4 * Copyright 2002, Log4cpp Project. All rights reserved.5 *6 * See the COPYING file for the terms of usage and distribution.7 */8 头文件的说明&#xff0c;以及与版权相关的说明一般都会放置在文件的开始位置 9 #ifndef _LOG4CPP_STR…

【SQL】服务器环境下的SQL

一、大型数据库的三层体系结构 web服务器&#xff1a;比如在淘宝页面上&#xff0c;输入“牛肉干”&#xff0c;就是web服务器来处理&#xff0c;提交给应用服务器。 应用服务器&#xff1a;在获取到“牛肉干”这个请求后&#xff0c;应用服务器决定如何汇集结果&#xff0c;并…

【置顶】全局变量的好处与坏处

近日在做项目的过程中对plsql的使用非常多&#xff0c;主要是编写存储过程实现业务逻辑。但是在coding的过程中遇到非常奇怪的问题。 问题是&#xff1a;在package包头中定义了一个变量&#xff0c;current_time : sysdate,然后在procedure使用这个定义的变量&#xff0c;直接i…

三个线程按顺序输出数字

当 n 3N 时&#xff0c;线程1输出 当 n 3N 1 时&#xff0c;线程2输出 当 n 3N 2 时&#xff0c;线程3输出 最终的输出为 0、1、2、3、4、5、6、7、8、10 #include <iostream> #include <thread> #include <mutex> #include <condition_variable&g…