zoukankan      html  css  js  c++  java
  • 292. Nim Game

    链接

    292. Nim Game

    题意

    你在和朋友玩这样一个游戏:桌上有一堆石头,你们每次都能从中移除1到3块石头,谁能移除最后一块石头就能获胜。在给定石头块数和你来先手的情况下,判断你是否可以获胜。

    思路

    这道题主要是思维上的难度。先从数量最少的考虑:
    一块:自己赢
    两块:自己赢
    三块:自己赢
    四块:自己只能移除1-3块,所以对方必赢
    五块:
    移除一块相当于对方处于上面四块的情况,所以自己赢
    移除两块相当于对方处于上面三块的情况,所以对方赢
    移除三块相当于对方处于上面两块的情况,所以对方赢

    那么换位思考一下,如果是你朋友先手,那你怎么才能保证你必赢呢?通过规律可发现,当石头块数为4的倍数时,后手的人必赢。因为先手的人一次只能移除1-3块,那么后手的人每次保证两个人移除块数和为4就行(比如A先拿1,那么B就拿3),这样可以保证剩余块数也总为4的倍数,到只剩下4块时,可以知道,后手的人必赢。也就是说,只要块数为4的倍数,那么题目中的“you”就必输。

    代码

    C:

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

    效率

    Your runtime beats 50.44% of c submissions

  • 相关阅读:
    linux学习之线程篇(二)
    linux学习之线程篇(一)
    linux学习之进程篇(四)
    linux学习之信号篇(二)
    linux学习之信号篇(一)
    myshell案例
    linux学习之gdb调试工具篇
    linux学习之Makefile篇
    linux学习之进程篇(三)
    Linux常用命令-1
  • 原文地址:https://www.cnblogs.com/zyoung/p/6587063.html
Copyright © 2011-2022 走看看