Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1146377
  • 博文数量: 103
  • 博客积分: 1897
  • 博客等级: 上尉
  • 技术积分: 1717
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-19 21:02
文章分类

全部博文(103)

文章存档

2013年(19)

2012年(84)

分类: IT职场

2012-04-21 11:01:48

早上看到一个笔试题,题目是这样的:100个乒乓球,两个人轮流从中取一定数目的球(每次至少取1个,最多取5个),能拿到第100个(也就是最后一个)乒乓球的人赢。
1.现在让你先拿,请问你第一次应该拿几个能保证自己赢?

2.接下来又该怎么取法,简要说明你的想法?

说句是在话,第一次看到这道题的时候,确实是有点摸不着头脑,这好像是一个经典的俄约瑟夫问题,但是,每次的增量又是可变的。。。想了一下,开始有了一点思路,那就是如果一个人要最后获胜的话,那么最后拿球的人一定是他,由于那个人是最先拿球的,那就意味着,前面已经经过偶数次的拿球了,即最后拿球的次数应该是2n+1次,最后剩下的球,肯定是在1和5之间,想到这里的时候,我的思路有点短路了,那么该怎么拿球才能够保证最后自己拿球的时候已经经过偶数次拿球了,并且球只剩下不多于五个呢?

  后来看到一个人的评论,令我思路顿开。。

  其实可以这样子,第一个次自己拿的时候就拿4个,接下来,对方拿n个,自己就拿6-n个球,比如对方拿了1个球,自己就拿5个球。。

  那么,为什么这样子就能保证自己肯定赢呢?

  道理是这样的,总共一百个球,自己第一次拿4个球,剩下96个球,那么,每次双方拿的球的总数都是6,总共就拿了16次,刚好偶数个。。这和我最初的想法有点出入,但是基本思想是一样的。。

 来到这里,可能有些人会有疑惑了。。那我干嘛非得拿6-n个,试想一下,你如果不把每次拿的总数凑成6的话,由于对方可以拿的球的个数是1-5个,那么就不能保证你一定会赢了。。。呵呵。。


阅读(2031) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:linux下真机调试android 程序

给主人留下些什么吧!~~