输赢问题
来源:互联网 发布:js图片下拉放大效果 编辑:程序博客网 时间:2024/05/01 00:37
此类题目的原型为:两个人比赛,从某一个数(Ns)开始,每次最间隔(1~n)个数,谁先到某一个指定数(Ne), 谁就输(或者赢)!
比如乒乓球问题:假设排列着100个乒乓球,由两个人轮流拿球装入口袋,能拿到第100个乒乓球的人为胜利者。条件是:每次拿球者至少要拿1个,但最多不能超过5个,问:如果你是最先拿球的人,你该拿几个?以后怎么拿就能保证你能得到第100个乒乓球?
解析如下(分两种情况):
1: 谁先到(Ne)就输: 我们从后往前推,要想赢,那么必须 Ne-1 的这个数是你的;因为然后对手间隔数的范围为(1~n), 所以继续往前推,你应该说的数为:(Ne - 1 - (1+n));依此类推,你要说的每一个数必须满足如下通式:
Ne - 1 - (1+n)*t (t:为自然数)
那么你要说的第一个数就是: (Ne-1) mod (1+n).
2:谁先到(Ne)就赢: 我们从后往前推,要想赢, 同理,那么Ne - (1+n)这个数你必须说,同理应该满足如下的通式:
Ne - (1+n)*t (t:为自然数)
那么你要说的第一个数就是: (Ne) mod (1+n).
因此,对于乒乓球的问题,属于第二种问题: 带入通式计算得到:只有第一个人先拿100 mod (1+5) = 4 个乒乓球,而且后面只要他不疏忽,每次拿球的数量必须满足: 本次拿球的数量 + 口袋中已有的数量 = 上次他拿完球后口袋中剩余的球的数量 + 6 (1+n)。这样他必然能赢。
- 输赢问题
- 输赢
- 输赢
- 输赢
- 动态规划预测游戏输赢的问题总结
- 《输赢》感悟
- 解读《输赢》:输赢在哪里?
- 《输赢》的感觉
- 五子棋判断输赢C
- 读输赢有感!
- 看完了"输赢"
- 输赢 商场小说引子
- 阅读小说《输赢》
- 《输赢》——催龙六式
- JAVA判断五子棋输赢
- 输赢的背后
- 《输赢》精彩段落总结
- winform 五子棋 判断输赢
- 零打碎敲学Android(二)—做个拼图游戏吧
- 在FiddlerScript中调用.NET
- Switched to Windows Live Writer
- [虚拟网卡]没有网络的单机使用IP来访问自已的机器或机器上的服务
- α330光圈调节的新认识
- 输赢问题
- TCP/IP网络编程之四书五经
- 一步一步学Remoting之二:激活模式
- 个人博客正式启动
- SVN/Apache 修改密码
- 开发语言,何时是个头
- 一步一步学Remoting之三:复杂对象
- 我们的优势(一)——蓝时代
- 要件定義-失敗例