【力扣日记】292 Nim游戏 | 脑筋急转弯 数学规律

做这道题时想到当初和我哥玩的游戏,每个人都只能报出1-3,两人轮换,从0开始,谁能报数22谁赢。

题目描述

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

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

算法

看到题本来是懵逼的,但是看到例子突然有了思路。

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

易知,n=1~3,先手赢;n=4,后手赢;n=5,此时先手拿1,n=4,先手变后手,先手赢。
推到n=8,此时后手赢。

易知n为4的倍数,后手赢,除此,先手一定赢。

很容易得到算法:

        if n>0:
            if n%4==0:return False
            return True
        return False
        if n==0:return False
        return True if n%4!=0 else False

考虑到n本就不应该为0,所以最终结果:

        return n%4

拓展

我想如果规则是先手拿走1~4,那么n=5时一定是后手赢,所以拓展规则应该是:
对规则要求每次拿走1~k个石子,石子数n为k+1的倍数时后手赢。除此,先手必须保证他第一步拿走石子后石子总数为k+1的倍数,这样先手一定赢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章