轮流拿(取)东西问题

来源:互联网 发布:sql多表删除 编辑:程序博客网 时间:2024/06/08 20:13

         假设有A、B两个人,轮流从一堆物品中拿物品,每次只能拿限定的个数,判断谁一定会拿到最后一个物品或者要想拿到最后一个物品应该采取什么样的策略。

         先看两道具体的题目:

1)  有A、B两个人,从50个苹果中轮流拿苹果,每次只能拿1个或者2个,A先拿,问A应该采取什么样的策略才能保证自己能拿到最后一个苹果。(腾讯面试题)

2)  A、B两个人从一堆玻璃球(共100个)中向外拿球,规则如下:① A先拿,然后一人一次交替进行;② 每次只能拿1个、2个或者4个。③ 谁拿最后一个球,谁就是最后的失败者。请问,A、B两个人谁将是失败者?(阿里巴巴面试题)

解题思路:这类题一般从后往前推,确定最后剩下多少个物品时自己一定会获胜,然后再制定相应的策略。

1)A要想获胜,就必须保证他在倒数第二次拿苹果之后还剩下3个,这样无论B拿1个还是2个,最后一个都是A拿到。A要保证最后剩3个,则A需要考虑自己第一次拿了苹果之后,剩下的苹果是3的倍数,这样A可以控制每次A和B拿的苹果之和为3,最后一定会剩下3个。该题中A只需刚开始拿2个,然后保证以后每次拿的个数与B拿的个数之和为3即可。

2)第2)的解题思路类似,B只要保证最后剩下的是1个或者4个,那么最后一个就一定是A拿。具体的策略是B要保证每次A和B拿玻璃球的个数之和为3个或者6个,这样B拿玻璃球之后剩下的玻璃球就是1个或者4个。
0 0