题目描述
有 2n 个棋子(n≥4)排成一行,开始位置为白色全部在左边,黑色全部在右边。(其中字母 O 表示白色棋子,字母 X 表示黑色棋子)OOOOXXXX。移动棋子的规则是:每次必须同时移动相邻两个棋子,颜色不限,可以左移也可以右移一空位上去,但不能调换两个棋子的左右位,每次移动必须跳过若干个棋子(不能平移),要求最后能够移成黑白相间的一行棋子。例如当 n=4 时,最终排列情况为:OXOXOXOX。输出棋子移动的过程。
输入描述
多组输入,每组一个正整数,占一行。
输出描述
输出移动步骤,每一步操作占一行
样例输入
4
样例输出
4,5-->9,10
8,9-->4,5
2,3-->8,9
7,8-->2,3
1,2-->7,8
楼上的代码来自:
https://blog.csdn.net/weixin_44609585/article/details/86715054
但是看上去这个才是正解:
https://blog.csdn.net/JetRichardLee1/article/details/52301247
如果有问题,请在我下面留言,我再帮你看。
大于或者大于4的话,基本上都是用递归,以4作为递归结束点
#include<stdio.h>
void move(int k)
{
if(k==4)
{
printf("4,5-->9,10\n");
printf("8,9-->4,5\n");
printf("2,3-->8,9\n");
printf("7,8-->2,3\n");
printf("1,2-->7,8\n");
}
else
{
printf("%d,%d-->%d,%d\n",k,k+1,2*k+1,2*k+2);
printf("%d,%d-->%d,%d\n",2*k-1,2*k,k,k+1);
move(k-1);
}
}
int main()
{
int N;
scanf("%d",&N);
while(N<4)
scanf("%d",&N);
move(N);
return 0;
}
结果图