最近面试,遇到一个问题,原意如下:
假设排列着100个乒乓球,由两个人轮流拿球装入口袋,能拿到第100个乒乓球的人为胜利者.条件是:每次拿球者至少要拿1个,但最多不能超过5个,问:如果你是最先拿球的人,你该拿几个?以后怎么拿就能保证你能得到第100个乒乓球?
当时由于心态问题,没做出来。现在回想,其实答案很容易思考:
每次至少能拿1个,最多能拿5个,也就是说,一个轮回下来,需要保证两个人能拿到球的总数为6个。因为,很显然,如果最后剩下6个球(少于6个,对方可一次取完。多于6个,如7个,对方会有两次取的机会,而你只有1次,不能保证你赢),对方先取,不管对方选取几个,最终一定是自己赢。那么,现在为了保证我赢,需要求出100%6后余多少个(这里是4个)。因此,最先拿球的话,我应该拿4个。那么,无论对方取几个,你只要保证他拿到的球的个数和你拿到球的个数之和是6(作一个轮回),最后,能保证一定是你赢!
总结这样题目的规律:如果最少拿m个,最多拿n个,总数为sum个,那么为了保证赢或者 胜利,第一次拿的个数应该为:sum%(m+n)。