题目描述
有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况:
○○○○○●●●●●
移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间(白棋在前黑旗在后)的一行棋子。如n=5时,成为:
○●○●○●○●○●
样例输入
4
样例输出
4,5–>9,10
8,9–>4,5
2,3–>8,9
7,8–>2,3
1,2–>7,8
递归方法求解
它每次把一个大型的复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,每一次的递归都能缩小问题规模
强调一遍: 遇到这类的题型,你需要选择一些简单的样例手工模拟以期寻找到规律
例如 N = 4时,操作如下
初始状态: ○○○○●●●●
第一步: ○○○ ●●●○●
第二步: ○○○●○●● ●
第三步: ○ ●○●●○○●
第四步: ○●○●○● ○●
第五步: ○●○●○●○●
当N = 5时
初始状态: ○○○○○●●●●●
第一步: ○○○○ ●●●●○●
第二步: ○○○○●●●● ○● --变成规模为4的问题,而N=4的解法已知
当N = 6时
初始状态: ○○○○○○●●●●●●
第一步: ○○○○○ ●●●●●○●
第二步: ○○○○○●●●●● ○● --变成规模为5的问题
由此可知当N > 4时,先将第N个和第N+1个棋子移到最右边,再将第2N-1和第2N个棋子移到原来的第N个和第N+1个处,则规模为N的问题转化问规模为N-1的问题
代码如下