给定棋盘的大小和骑士的初始位置,计算出k
骑士移动后进入棋盘内部的可能性。
注意:
骑士以相等的概率进行所有8个可能的动作。
骑士一旦离开棋盘,便无法再回到里面。
输入值
输入以逗号分隔,形式为:
l,k,x,y
其中l
国际象棋棋盘的长与宽k
是,骑士将要移动的次数,是骑士x
初始位置的x位置,以及y
的y位置。请注意,这0,0
是板的l-1,l-1
左下角,也是板的右上角。
算法:
从骑士的初始坐标开始。对该位置进行所有可能的移动,并将这些移动与其概率相乘,对于每个移动以递归方式调用该函数,请继续执行此过程,直到满足终止条件为止。终止条件是骑士在国际象棋棋盘外面,在这种情况下返回0,或者在完成所需的移动次数后返回1。
如我们所见,递归的当前状态仅取决于当前坐标和到目前为止完成的步骤数。因此,我们可以以表格形式存储此信息。
信用
这项挑战最初来自根据CC BY-NC-ND 2.5 IN许可发布的crazyforcode.com博客。对其进行了少许修改,使其更具挑战性。
14
为什么要开一个精确的算法?我不确定是否确实有更优雅的替代方法,但是要求使用特定算法可能会阻止其他聪明方法。另外,我认为您无需指定太多的坐标系-根本不影响概率。
—
马丁·恩德
“输入以逗号分隔,形式为:l,k,x,y” -那么输入是我们必须解析的字符串吗?编写带有4个参数的函数是否可以接受?
—
克里斯蒂安·卢帕斯库
@Edi如果没有时间尝试其他人,请不要将答案标记为“接受”-将某事物标记为接受,因此基本上是在说“挑战已经结束”-尽管世界上大多数人可能没有甚至没有时间去看它!
—
桑契斯2015年
@Edi例如,此挑战的来源允许复制和重新分发,但前提是您具有适当的信誉。
—
2015年