棋子移动题解

这是一篇关于棋子移动问题的博客,作者通过分析样例发现该问题与汉诺塔问题相似,总结出棋子移动的规律,并利用递归思路进行解题。在观察到n, n+1移动到2n+1, 2n+2的模式后,作者推导出递归解决方案,并提供了AC代码。" 133333152,20037101,Golang实现CSRF防护:生成与验证令牌,"['csrf', '前端', 'golang']
摘要由CSDN通过智能技术生成

1.棋子移动:

魔法世界的历史上曾经出现过一位赫赫有名的不败战神陈庆之,陈庆之以棋道悟兵法,一生身经数百战,没有一场败绩,而且没有一场不是在绝对的劣势中大胜敌军。

受此影响,魔法世界开始流行一种叫棋子移动的游戏,即有2N个棋子(N≥4)排成一行,开始位置为白子全部在左边,黑子全部在右边,例如当N=4时,棋子排列情况为:

〇〇〇〇●●●●

移动棋子的规则是:每次必须同时移动相邻两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置.每次移动必须跳过若干个棋子

(不能平移),要求最后能移成黑白相间的一行棋子。例如当N=4时,最终排列情况为:

〇●〇●〇●〇●

试求出移动步骤。

题解:

这道题刚刚看到我们不难推测出这是一道递归题,而且是一道和“汉诺塔”极其相似的题。之后有的人和我一样去手算了一遍样例,但后来我发现其实不用列举太多:

根据前面我们推测出这是一道与汉诺塔相似的题,那就和“汉诺塔”一样去推测棋子移动的规律:
通过观测题目给出的样例

    4,5-->9,10

    8,9-->4,5

    2,3-->8,9

    7,8-->2,3

    1,2-->7,8 

把上面的分成两个一组来看,有规律: n, n + 1 --> 2 * n + 1, 2 * n + 2 和 2 * n, 2 * n + 1–>n, n + 1有了这个规律我们就只用考虑n是多少就可以了。其次让我们继续来枚举

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值