某取数问题的递推解法
来源:互联网 发布:电脑钢琴软件 编辑:程序博客网 时间:2024/05/21 21:47
杯具啊,听说是数论的题,可惜不会数论,
只能用递推法给出一个范围内的结果,原题如下:
对于任意整数n, 有甲乙两个人,每个人可以从n中取出6的次方个数,比如1,6,36,216。。。。,
比赛规则为:甲先取,谁最后将数取到0便为胜者。
注: 假设甲乙都都以最优化方式取数。
问: 给定任意整数n,设计算法计算出谁会是最后的胜者
这个题估计是以前看过某题的升级版,
某题大意是这样的:
一堆石头,两个人轮流取,每次可取1 2 3 4 5中的某一个数块,
不能不取,也不能多取,
取到最后一堆者为赢
给定石头数n,问先取者有无必须策略
答案为如果石头数为6的整数倍,
则后取者必赢(先取者取k个,则后取者取6-k个就可以保证赢)
如果石头数为非6的整数倍,
则先取者必赢(先取k个石头使石头数变为6的整数倍,转化为后取者必赢的局面)
这个转化的思想比较重要,
对于这个问题,估计数论专家会有理论上的解答。。。
这里用程序的递推+转化的思想可以解决某一整数范围内的问题,
但对于必胜的局面,没有给出具体的取法。。。
具体的做法是从1开始,依次分析。记(k,赢)为整数为k时,先取者必赢
则前几个的结果为
(1,赢),(2,输),(3,赢),(4,输),(5,赢),(6,赢),(7,输),(8,赢)
以这几个结果向后递推,
方法如下:
对于某整数n,从1到n-1的结果已经给出,
下面做法如下:
先找出最大的6的k次方小于n的数k,
然后从m属于{1,6,...,6^k}检查,
看n-m的结果是先取者必赢还是必输,
如果有一个结果是先取者必输,
那么对于整数n的结果就是先取者必赢,否则必输,
依次类推就行了,
不说了,上代码,
最后结果为true表示先取者必赢,false表示先取者必输,
不清楚这个结果正确不。。。
上代码:
需要1.4以上的jdk支持
上代码:
- 某取数问题的递推解法
- Joseph问题的递推公式解法
- 约瑟夫问题(Josephus问题)的递推O(n)解法、循环解法、单循环链表解法
- 约瑟夫环的递推解法
- 背包问题 顺推解法
- 马拦过河卒问题 (递推解法)
- [zZ]常见递推关系解法
- josephus问题的解法
- 约瑟夫问题的解法
- 约瑟夫问题的解法
- 乘法逆元: 扩展欧几里德 费马小定理 递推 带余数同余式的一般解法
- 错排问题的递推解决
- 放苹果问题的递推思路
- 错排问题的递推解决
- 递推问题之“佐罗”的烦恼
- 【递推问题】LELE的RPG难题
- POJ,北大OJ,1664 ,放苹果。递推解法。。。
- HDU 2045 20 47 LELE的RPG难题 阿牛的EOF牛肉串(附带递推解法)
- 新唐M051系列
- 如何让ie8地址栏下拉框里不显示历史记录和收藏夹
- TCM
- WPF指南之XAML的名字空间——出自《IT168》
- 彩色图像处理(RGB图像)
- 某取数问题的递推解法
- 行转列 -- pivot 的应用
- bugfree如何修改Bug7种解决方案的标注方法
- opencv blobtrack 大致算法思想
- Linux驱动的地址空间和硬件地址空间说明
- Big endian / little endian
- 再别康桥
- MapXtreme java MapXtremeImageRenderer渲染器的实现
- java,返回多类型数组