zoukankan      html  css  js  c++  java
  • 类似拿乒乓球数问题的思考

    最近面试,遇到一个问题,原意如下:

    假设排列着100个乒乓球,由两个人轮流拿球装入口袋,能拿到第100个乒乓球的人为胜利者.条件是:每次拿球者至少要拿1个,但最多不能超过5个,问:如果你是最先拿球的人,你该拿几个?以后怎么拿就能保证你能得到第100个乒乓球?

    当时由于心态问题,没做出来。现在回想,其实答案很容易思考:

    每次至少能拿1个,最多能拿5个,也就是说,一个轮回下来,需要保证两个人能拿到球的总数为6个。因为,很显然,如果最后剩下6个球(少于6个,对方可一次取完。多于6个,如7个,对方会有两次取的机会,而你只有1次,不能保证你赢),对方先取,不管对方选取几个,最终一定是自己赢。那么,现在为了保证我赢,需要求出100%6后余多少个(这里是4个)。因此,最先拿球的话,我应该拿4个。那么,无论对方取几个,你只要保证他拿到的球的个数和你拿到球的个数之和是6(作一个轮回),最后,能保证一定是你赢!

    总结这样题目的规律:如果最少拿m个,最多拿n个,总数为sum个,那么为了保证赢或者 胜利,第一次拿的个数应该为:sum%(m+n)

  • 相关阅读:
    算法
    日常
    算法
    算法
    算法
    算法
    NaviCat连接mysql出现加密方式错误的解决方案:
    Sql sugar的使用
    报表体联查详情页面
    第一次用临时表的感受:
  • 原文地址:https://www.cnblogs.com/cmderq/p/9130843.html
Copyright © 2011-2022 走看看