【前端面试题】怎么拿到第100个乒乓球

今天做笔试题,看到一道很有意思的思考题,分享出来看看


问题:假设有100个乒乓球,两个人轮流拿取若干球,要求是每次拿的数量最少为1个,最多为5个,如果你是先手,怎么拿保证能100%拿到第100个乒乓球?

这个题一共有两问,

第一:第一次拿几个?

第二:之后每次拿几个?


解析(想看结论的可以跳到最下面)

首先,先分析轮次,题目要求我(自己)拿到第100个乒乓球,证明游戏的最后一轮必须是自己拿球。

由此推断,我是先手,并且最后一轮是我行动,即我始我终,那么游戏进行的轮次为2n-1次,奇数

第二步,抛开第一次我先手拿,由于是我最后一次拿,那么我和对手的回合可以合并看出一个动作,即我和对手在各自的回合内共拿了n个乒乓球,这个动作执行了x轮

这个可能有点乱,举个例子

比如第一次(我先手)拿了3个球

第二次对手拿了2个球

第三次我拿了3个球

这时把第二次和第三次合起来看,这样我和对手在各自的回合一共拿了5个球,这时n=5

以此类推,第四次和第五次视为一次,第六次和第七次视为一次,共计会有x次行动

这时任务就变成了在这x轮内,把100个乒乓球正好拿完(减去第一次我先手拿的a个球)

为什么要正好拿完?

可以列举一下特殊情况:

在最后一轮中,如果剩10个球,对手可以操作一下,先拿4个,到我们时,只能拿1-5个,这样最后肯定会剩最多5个,最少1个,那么是对手赢

同理,如果剩6-9个球,对手那么照样可以拿1-3个球,照样最后会赢

如果剩1-5个呢?对手直接拿走了,也赢了

所以,只要剩球,就赢不了

只有正好拿完,才能赢!

(什么?你说剩10个以上?10个以上本次轮根本就拿不完,就不是最后一轮-.-)

第三步,怎么让x次轮流拿后,正好拿完100个球?

首先考虑我和对手都拿时,一共能拿多少个?

最少2个(1,1),最多10个(5,5),由于我们无法预测对手,那如果要操作这个总数,那只能从我们自身控制

最后发现,只有6个是我们100%能控制的(1,5)(2,4)(3,3)(4,2)(5,1)

那这x轮,我们要控制每轮6个

第四步,我们想起第一轮使我们行动,可以在x轮拿球之前,剔除一部分球

首先用100对6取余,结果为4

那么第一问答案:4个

那么答案已经出来了,先手拿4个,之后每次拿根据前一次对手拿的个数调整,假如对手拿了n个,那我们要拿6-n个,这样才能保证100%拿到第100个球

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值