leetcode笔记:Nim Game

本文介绍了Nim游戏的规则,当你和朋友轮流从一堆石头中取出1到3颗,最后一颗石头的人输。面对4的倍数石头数量时,先手无法获胜;否则,先手可以通过正确策略确保胜利。提供了一行代码解决方案来判断先手是否能赢。
摘要由CSDN通过智能技术生成

一. 题目描述

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.

二. 题目分析

题目的大意如下:

你正在和你的朋友们玩下面这个Nim游戏:有一堆石头放在桌上,你每次可以从中拿走1到3颗。谁消除掉最后一个石头即为赢家。假设你是第一轮开始取石头。

现在你们游戏中的每个人都有着非常聪明的头脑和绝佳的策略。写一个函数,对与一个给定的石头数目,算出你是否可以赢得这场比赛。

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

更多关于Nim Game的解释,可参照百科:http://baike.baidu.com/link?url=uxWV7mNdl-jkDWL6qj06zSX9Luvazbck4XqDo6IEcNgh2lNagWOmn7FyiN_YrjPHyaAyGeCF6yz2SwC-Irb2X_

其实对于这单一的问题,可以使用一行代码解决。因为例子中当且仅当出现了4的倍数,先手必输,其余情况先手都可以获胜。

三. 示例代码

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

四. 小结

这道题可以说毫无难度,但也可以经过适当变化,变成复杂的题目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值