有2n個棋子(n≥4)排成一行,開始爲位置白子所有在左邊,黑子所有在右邊,以下圖爲n=5的狀況:ios
○○○○○●●●●●web
移動棋子的規則是:每次必須同時移動相鄰的兩個棋子,顏色不限,能夠左移也能夠右移到空位上去,但不能調換兩個棋子的左右位置。每次移動必須跳過若干個棋子(不能平移),要求最後能移成黑白相間的一行棋子。如n=5時,成爲:編程
○●○●○●○●○●svg
任務:編程打印出移動過程。spa
輸入格式:
一個整數n(n<=50)code
輸出格式:
若干行,表示初始狀態和每次移動的狀態,用」o」表示白子,」x」表示黑子,」-「表示空行。xml
輸入樣例#1:
7
輸出樣例#1:
ooooooo*******–
oooooo–*****o
oooooo******–o*
ooooo–****o*o
ooooo*****–o*o*
oooo–***o*o*o
oooo****–o*o*o*
ooo–**o*o*o*o
ooo*o**–o*o*o
o–o**oo*o*o*o
o*o*o*–o*o*o*o*
–o*o*o*o*o*o*o*ci
#include<iostream>
using namespace std;
char a[10000];
int n,sp;
void print()
{
for(int i=1;i<=2*n+2;i++)cout<<a[i];
cout<<endl;
}
void move(int k)
{
for(int j=0;j<=1;j++)
{
a[sp+j]=a[k+j];
a[k+j]='-';
}
sp=k;
print();
}
void choose(int x)
{
if(x==4)
{
move(4);move(8);move(2);move(7);move(1);
}
else
{
move(x);move(2*x-1);choose(x-1);
}
}
int main()
{
cin>>n;
sp=2*n+1;
for(int i=1;i<=n;i++)a[i]='o';
for(int i=n+1;i<=2*n;i++)a[i]='*';
a[2*n+1]='-';
a[2*n+2]='-';
print();
choose(n);
}