20个银币1个金币
来源:互联网 发布:淘宝la prairie假货 编辑:程序博客网 时间:2024/05/06 00:25
个人主页:guanzi.info
问题描述:
假设有20个银币1个金币,你和你的同伙分赃,每次可拿走1~4个硬币,当银币全部拿出后才可以拿金币。请问你怎么拿才可以保证金币属于你?
思考过程:
必须承认的一点是,一看到这个题我蒙了。。。。冷静一下,躺下来睡一觉
先从简单入手吧,用Y代表银币,J代表金币。我是A,同伙是B
如果这个题是
1Y 1J的话-----A必败(条件1)
2Y 1J的话-----A拿1个必胜
3Y 1J的话-----A拿2个必胜
4Y 1J的话-----A拿3个必胜
5Y 1J的话-----A拿4个必胜
6Y 1J的话-----这个经过我仔细思考以后发现好像A没有必胜策略!!!
于是感觉难道是出现循环了,难道隐藏着规律!!!
接下来就是漫长的讨论与思考过程。后产生如下结论
当某人mini-cool需要拿银币是遇到的是nY 1J的情况,我们简述为情况F(n)。
假设F(n)对于当前mini-cool来说是必败的,那么我们可以推论当mini-cool面对F(n+1 ~ n+4)的情况时是有必胜策略的。(推论1)
看懂上一句话很重要,于是我决定解释一下。
当mini-cool面对F(n+1)时,mini-cool毫不犹豫的拿走1个Y,那么mini-cool的同伙就面对的是F(n),而我们知道F(n)是必败的,所以mini-cool赢了
再多嘴一句
当mini-cool面对F(n+4)时,mini-cool毫不犹豫的拿走4个Y,那么mini-cool的同伙就仍然面对的是F(n),而我们知道F(n)是必败的,所以mini-cool赢了
另一个结论
假设F(n)对于当前mini-cool来说是必败的,那么我们可以推论mini-cool面对F(n+5)时是必败的.(推论2)
这个也要解释一下
当mini-cool面对F(n+5)时,mini-cool不论是取1~4的任何数,最终对于他的队友来说形成的情况都是在F(n+1~n+4)的情况中。而通过推论1我们知道F(n+1~n+4)是有必胜策略的。
结论:
再结合条件1可知F(1)必败,于是F(6)必败,F(11)必败,F(1+5×n)必败
F(1)必败,于是有F(2 ~ 5)必胜, F(7~10)必胜,F(1+1×n ~ 1+4×n)必胜
在必胜的情况下,A要做的就是取走一个数,使得B面对的是必败的情况。也就是A面对的是F(1+1×n ~ 1+4×n),B面对的是F(1+5×n)。且A每一次取数都保证B要面对必败的情况。
- 20个银币1个金币
- N银币 + 1金币的问题
- 5个海盗分金币
- 5个海盗分100个金币
- 5个海盗,分100个金币
- 5个海盗,分100个金币
- 写一个函数,要求传入一个1到n位数的随机数值,如传入随机数123456789,返回12345金币67银币89铜币,传入随机数1234,返回0金币12银币34铜币。 提示:推荐Int,Rnd,Mid,L
- 5个海盗分100枚金币
- 五个海盗如何分100个金币呢?
- 10个房间里放着随机数量的金币
- 五个海盗如何分100个金币呢?
- 我支付20个金币得来的信息,是否有用,暂且不管,贴在这儿,以后来验证
- 机器人身上金币当中小于默认上分值时,2个机器人中一个不上分
- 个
- 个
- 个
- 个
- 个
- Git服务器Gitosis安装设置
- 转载一篇讲解Hash表的文章
- 堆排序
- 重学C++ 用strtok标记字符串
- 字符串和数字之间的相互转换
- 20个银币1个金币
- 开源
- 母板页中引用Js脚本问题
- cocos2d-x 精灵可视区域的设置与锚点无关系
- photoshop打造苹果风格的按钮
- Ubuntu下安装PyQuery出现:ERROR: /bin/sh: 1: xslt-config: not found
- PyBatis优势和劣势
- libx264 compile for android
- oracle监听不能自动启动(但服务已设置自动),手动启动后又停止