社区
C#
帖子详情
关于搬山游戏的算法题
leavemaple
2010-06-16 04:02:47
题目:设有n座山,计算机与人作为比赛的双方,双方轮流搬山。规定每次搬山的数目不能超过k座,谁搬最后一座谁输,每次允许搬山的最大数目(k)。谁都可以先开始搬,双方轮流搬山直到最后一座山搬完为止。
这是题目,设计一个程序不难,简单点,我们假设总数n=100,k=10。
下边是难题,如何设一个计算机的搬山算法,不论在谁先开始搬的情况下,都是计算机获胜?
欢迎大家讨论啊。
...全文
474
24
打赏
收藏
关于搬山游戏的算法题
题目:设有n座山,计算机与人作为比赛的双方,双方轮流搬山。规定每次搬山的数目不能超过k座,谁搬最后一座谁输,每次允许搬山的最大数目(k)。谁都可以先开始搬,双方轮流搬山直到最后一座山搬完为止。 这是题目,设计一个程序不难,简单点,我们假设总数n=100,k=10。 下边是难题,如何设一个计算机的搬山算法,不论在谁先开始搬的情况下,都是计算机获胜? 欢迎大家讨论啊。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
绿色夹克衫
2010-06-18
打赏
举报
回复
这个不可能,如果mod 11 = 0的话,只要对方不犯错,先手肯定会输的。
不过可以把规则弄复杂一些,是人都会犯错误的。
[Quote=引用 19 楼 leavemaple 的回复:]
大家还有没有更好的意见,最好附上实现代码。暂时不结贴,大家踊跃讨论讨论,可以扩展思维的,呵呵。
我在12楼不是已经给出答案了吗?
把文字描述翻译成代码不会吗?
当k=10 就是mod 11了吧。 我知道这个规律,我意思是说不管怎么样,能不能总让一方赢呢?就算 mod 11=0的情况出现……
[/Quote]
jimh
2010-06-18
打赏
举报
回复
不可能100%赢的,胜率看m,先手的胜率为m/(m+1),后手的胜率为1/(m+1),m一般要大于1,所以,m越大,先手的胜率就越大,但不管如何,先手的胜率都大于50%。
leavemaple
2010-06-18
打赏
举报
回复
[Quote=引用 20 楼 leavemaple 的回复:]
引用 18 楼 litaoye 的回复:
这个用笔就可以算,100和10的话,只要求mod 11就好,mod 11 = 0的话,先手负,否则先手胜。
100 % 11 = 1,所以先拿的赢,先拿1个,之后无论对手拿多少个(设为k个),你就拿11 - k个,最后就赢了。
这个属于最简单的nim问题,还有许多复杂的变化,比如只可以拿2的幂......
引用 14 楼 leavemapl……
[/Quote]
是啊,当时我就想了, 如果 k=10的时候 如果 mod 11 = 0 ,那就必输无疑了。哎,看来又是个无解了哦。
leavemaple
2010-06-18
打赏
举报
回复
哎,早就料到是这个结局了,那天想了一晚上,都感觉不可能100%,结贴吧。
aimeast
2010-06-17
打赏
举报
回复
[Quote=引用 16 楼 leavemaple 的回复:]
大家还有没有更好的意见,最好附上实现代码。暂时不结贴,大家踊跃讨论讨论,可以扩展思维的,呵呵。
[/Quote]我在12楼不是已经给出答案了吗?
把文字描述翻译成代码不会吗?
leavemaple
2010-06-17
打赏
举报
回复
[Quote=引用 18 楼 litaoye 的回复:]
这个用笔就可以算,100和10的话,只要求mod 11就好,mod 11 = 0的话,先手负,否则先手胜。
100 % 11 = 1,所以先拿的赢,先拿1个,之后无论对手拿多少个(设为k个),你就拿11 - k个,最后就赢了。
这个属于最简单的nim问题,还有许多复杂的变化,比如只可以拿2的幂......
引用 14 楼 leavemaple 的回复:
引用 11 楼 leav……
[/Quote]
不好意思,LS引错了,应该引18楼的。。。
leavemaple
2010-06-17
打赏
举报
回复
[Quote=引用 17 楼 aimeast 的回复:]
引用 16 楼 leavemaple 的回复:
大家还有没有更好的意见,最好附上实现代码。暂时不结贴,大家踊跃讨论讨论,可以扩展思维的,呵呵。
我在12楼不是已经给出答案了吗?
把文字描述翻译成代码不会吗?
[/Quote]
当k=10 就是mod 11了吧。 我知道这个规律,我意思是说不管怎么样,能不能总让一方赢呢?就算 mod 11=0的情况出现了? 是不是无解了?
绿色夹克衫
2010-06-17
打赏
举报
回复
这个用笔就可以算,100和10的话,只要求mod 11就好,mod 11 = 0的话,先手负,否则先手胜。
100 % 11 = 1,所以先拿的赢,先拿1个,之后无论对手拿多少个(设为k个),你就拿11 - k个,最后就赢了。
这个属于最简单的nim问题,还有许多复杂的变化,比如只可以拿2的幂......
[Quote=引用 14 楼 leavemaple 的回复:]
引用 11 楼 leavemaple 的回复:
引用 9 楼 leavemaple 的回复:
其实如果把数字设置大 n=100 k=99的话
必定先搬的赢
我们假设k < n/2 -1 不考虑上边特殊情况
会不会有算法让计算机必胜呢
如果正常情况下 计算的搬山数量应该是 (剩余的山-1)/(k+1) 如果结果为0 就搬1个。
但是这种情况不能保证计算机必胜。
……
[/Quote]
leavemaple
2010-06-16
打赏
举报
回复
大家还有没有更好的意见,最好附上实现代码。暂时不结贴,大家踊跃讨论讨论,可以扩展思维的,呵呵。
jimeixuehua
2010-06-16
打赏
举报
回复
[Quote=引用 7 楼 zbc496218 的回复:]
每天回帖即可获得10分可用分
[/Quote]
对
amoeet
2010-06-16
打赏
举报
回复
按公式计算?这样就不叫游戏了,只是一个演算器~~
应该能写出公式吧~~类似的规律什么的
jsonzbc
2010-06-16
打赏
举报
回复
每天回帖即可获得10分可用分
xiaod1986
2010-06-16
打赏
举报
回复
过来学习!!
wuyq11
2010-06-16
打赏
举报
回复
就是循环操作,n每次减k,当n<10时谁操作时谁获胜
spmzfz
2010-06-16
打赏
举报
回复
但这样一样来就不是
要求都是计算机获胜
的了。
spmzfz
2010-06-16
打赏
举报
回复
[Quote=引用 2 楼 caozhy 的回复:]
下边是难题,如何设一个计算机的搬山算法,不论在谁先开始搬的情况下,都是计算机获胜?
那计算机和计算机对垒呢?那人按照程序慢慢演算代替电脑呢?
[/Quote]
嗯,呵呵,那应该是先“搬”的那个“计算机/人”要获胜。
threenewbee
2010-06-16
打赏
举报
回复
下边是难题,如何设一个计算机的搬山算法,不论在谁先开始搬的情况下,都是计算机获胜?
那计算机和计算机对垒呢?那人按照程序慢慢演算代替电脑呢?
changjin642
2010-06-16
打赏
举报
回复
占个沙发先。
leavemaple
2010-06-16
打赏
举报
回复
[Quote=引用 11 楼 leavemaple 的回复:]
引用 9 楼 leavemaple 的回复:
其实如果把数字设置大 n=100 k=99的话
必定先搬的赢
我们假设k < n/2 -1 不考虑上边特殊情况
会不会有算法让计算机必胜呢
如果正常情况下 计算的搬山数量应该是 (剩余的山-1)/(k+1) 如果结果为0 就搬1个。
但是这种情况不能保证计算机必胜。
什么扑克牌。。。
[/Quote]
这个可以推算出来我上面的公式吧?我是说不管谁先开始,都让计算机获胜,可以吗?100个东西,一次最多10个。能写个算法,永远让计算获胜么?
z5503317
2010-06-16
打赏
举报
回复
ls牛人啊...
加载更多回复(4)
C语言常用
算法
102
搬山
游戏
103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 109 复平面作图 110 绘制彩色抛物线 111 绘制正态分布曲线 112 求解非...
100个python
算法
超详细讲解:
搬山
游戏
设有n座山,计算机与人作为比赛的双方,轮流
搬山
。规定每次搬 山数不能超过k座,谁搬最后一座谁输。
游戏
开始时,计算机请人输入 山的总数n和每次允许
搬山
的最大数k,然后请人开始,等人输入了需 要搬走的山的数目后...
搬山
游戏
设有n座山,计算机与人为比赛的双方,轮流
搬山
。规定每次
搬山
的数止不能超 过k座,谁搬最后一座谁输。
游戏
开始时。计算机请人输入山的总数(n)和每次允许
搬山
的最大数止(k)。然后请人开始,等人输入了需要搬走的山的...
python埃及分数式_趣学Python
算法
100例
算法
源于生活,又可以改变生活。本书专为Python初学者量身打造,内容涵盖Python编程的基础知识和常用
算法
,是初学
算法
设计与实现的不错选择。本书从一些经典
算法
出发,介绍了100个趣味编程实例。这些实例大体按照...
算法
的趣味
题
看到一些讲解
算法
的趣味
题
,可以研究一下。http://www.kuqin.com/tiku/c100/ C/C++语言程序百例学习指南 100.数字移动 99.超长正整数的加法 98.八皇后问
题
97.满足特异条件的数列 96.选美比赛 95.将阿拉伯...
C#
111,092
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章