LeetCode 292 Nim Game(Nim游戏)

翻译

你正在和你的朋友们玩下面这个Nim游戏:桌子上有一堆石头,每次你从中去掉1-3个。谁消除掉最后一个石头即为赢家。你在取出石头的第一轮。

你们中的每一个人都有着聪明的头脑和绝佳的策略。写一个函数来确定对于给定的数字是否你可以赢得这场比赛。

例如,如果堆中有4个石头,那么你永远也无法赢得比赛:无论你移除了1、2或3个石头,最后一个石头都会被你的朋友所移除。

原文

You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.

Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.

For example, if there are 4 stones in the heap, then you will never win the game: no matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend.

分析

题目一开始不是很理解,因为朋友如果有2个、3个、多个的情况是完全不一样的呐,后来仔细一看原文第一句withyourfriend,发现只是和1个朋友玩游戏。

于是我设定了一个判断条件

bool yourTrun = true;

后面巴拉巴拉写了一堆代码全错……

加上一天的劳累我开始趴着睡觉了,脑子里还在回想。忽然发现:

1-true
2-true
3-true
4-false
5-true
6-true
7-true
8-false

然后抬起头重新写了一遍:

bool canWinNim(int n) {
    if ((n - 1) % 4 == 0 || (n - 2) % 4 == 0 || (n - 3) % 4== 0) return true;
    else return false;
}

哇,通过了,感觉整理整理:

bool canWinNim(int n) {
    return (n - 1) % 4 == 0 || (n - 2) % 4 == 0 || (n - 3) % 4 == 0;
}

继续整理,原来这么简单呐:

bool canWinNim(int n) {
    return n % 4 != 0;
}

忽然就不困了。^_^

代码

class Solution {
public:
    bool canWinNim(int n) {
        return n % 4 != 0;
    }
};
时间: 2025-01-30 17:57:28

LeetCode 292 Nim Game(Nim游戏)的相关文章

Nim教程【二】

第一篇教程1秒内就被管理员从首页踢掉了 管理员嫌内容太少,没有含金量,这次多写一些. 这应该是国内第一个关于Nim入门的系列教程 好,闲话休提,言归正传 Nim介绍 Nim代码会编译成C语言的代码,再编译成本地机器码,不依赖于虚拟机, 而且生成的可执行文件比较小,不依赖于其他库,分发起来比较方便 拥有一个"非追踪式"的垃圾收集器,这就非常适用于类似游戏这样的"弱实时"系统 让程序员拥有直接操纵内存和访问硬件的权力(手动管理的内存有别于垃圾收集器可收集的内存) 零开销

Nim教程【七】

这是国内第一个关于Nim的系列教程 先说废话 很开心,在今天凌晨快一点多的时候拿到了 nim-lang.com:nim-lang.cn:nim-lang.net 这三个域名,到不是为了投资,准备用nim-lang.com做一个社区出来 不知道国内有没有人或者机构打算赞助这个事情的 整型 Nim语言中有10个整型类型 int;int8;int16;int32;int64;uint;uint8;uint16;uint32;uint64 默认的整型类型是int 可以使用尾缀的方式来设置整型的类型,就像

<font color="red">[置顶]</font>

Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸,本博客会持续更新,感谢您的支持,欢迎您的关注与留言.博客有多个专栏,分别是关于 Windows App开发 . UWP(通用Windows平台)开发 . SICP习题解 和 Scheme语言学习 . 算法解析 与 LeetCode等题解 . Android应用开发 ,而最近会添加的文章将主要是算法和Android,不过其它内容也会继续完善. About the Author 独立 Windows App 和

Java Swing 非常漂亮外观Nimbus的使用方法实例_java

Java Swing界面外观的一种,在Java 6 Update 10中首次亮相.当 Swing 古老的 Metal界面外观 首次发布时,其主要的美感竞争来自 Windows 95 界面.在十年前的图形用户界面条件下,Metal 界面 相对于当时的其他普通界面来说是一种很有吸引力的高雅的选择.Java SE 5 中更新的 Ocean 主题帮助 Metal 成为目前可行的选择,但是修改 Swing 跨平台界面外观也已是当务之急.进入 Nimbus 界面外观,可以看到崭新的基于 合成 的现代外观.N

2014 网选 5011 Game(Nim游戏,数学题)

/* 题意:Nim游戏! 思路:通过异或,判断将n个数表示成二进制的形式之后,是否对应位的数字1 的个数是偶数! */ #include<iostream> using namespace std; int main(){ int n, x, s; while(cin>>n){ s=0; while(n--){ cin>>x; s^=x; } if(s) cout<<"Win";//不是偶数 else cout<<"

使用mksysb实现VMControl管理环境中多网络NIM Master的备份和快速迁移

对 VMControl 使用的多网络 NIM Master 进行备份和迁移需要考虑到的一些问题 作为 VMControl 管理环境中重要组成部分,Power 系统管理员需要非常注意 NIM Master 本身的备份,考虑到 Power 服务器发生故障时如何进行快速恢复.例如,NIM Master 所在的 Power 服务器发生硬件故障,我们就需要把 NIM Master 快速迁移到全新的 Power 服务器上. 理论上,Power 系统管理员可以利用任何 NIM Master 对当前 VMCon

Nim 语言引发关注

一种新兴的编程语言项目最近吸引了越来越人的关注.Nim是一种静态类型.命令式的系统级编程语言,其作者是Andreas Rumpf,最新版本是v0.10.2,正在向1.0版迈进.Nim的语法受到了Python和Pascal的启发,其主要特性包括编译到C的原生代码生成,不依赖于虚拟机:非跟踪垃圾收集器:跨模块内联:编译器和标准库都用Nim实现:强大的元编程能力,等等.它是如此受欢迎以至于<Unix in Rust>的作者为它放弃了Rust.Rust是Mozilla主导开发的系统级编程语言. 文章转

Nim教程【四】

这是国内第一个关于Nim的系列教程 先说废话 不得不说Rust也是门不错的语言,园子里 有人曾经说: Rust语言除了library或keyword缩写比较恶心以外其他所有地方完爆go 还有人曾这样评价Rust语言 Rust 可以说是 D 语言二代目,  没有 D 里的一些经验主义设计,  而且更函数式,  作为 a better C++ 当之无愧.  Pattern matching, Block, Generic 这些东西, Go 有么?  不好的地方是集成 feature 略贪心,  指针

nim的引用和指针

nim语言的引用和其他语言的指针有点相似 可以提供一种"多对一"的关系 这就意味着不同的引用可以指向同一个内存位置   nim区分可被追踪的引用和不可被追踪的引用 不可被追踪的引用又称为指针 可被追踪的引用可以被垃圾回收器回收 不可被追踪的引用指向手动分配的对象,或其他地方创建出来的一块内存区域 这也就是说,不可被追踪的引用是不安全的 对于某些底层操作,不可被追踪的引用有其存在的必要   可被追踪的引用使用ref关键字定义, 不可被追踪的引用使用ptr关键字定义   空下标的方括号[]