14. 有黑白棋子各有N个(分别用*和O代替),按下图方式排列
***...***OOO...OOO
N个黑棋 N个白棋
允许将相邻两个棋子互换位置,最后使队形成黑白交替排列,试编程实现该操作。
#include<stdio.h>
#define MAX 20
char state[MAX*2+1];
// Move
// 把第end位置的棋子交换到第start位置
// 其他棋子依次向后移动一个位置
void Move(int start, int end)
{
while( end > start )
{
int tmp = state[end];
state[end] = state[end-1];
state[end-1] = tmp;
puts(state);
--end;
}
}
int Solve(int n)
{
int i;
puts(state);
for(i=1;i<n;++i)
Move(i*2-1,n+i-1);
}
int main(void)
{
int i,n;
scanf("%d",&n);
for(i=0;i<n;++i)
state[i] = '*';
for(i=n;i<n*2;++i)
state[i] = '0';
state[i] = '/0';
Solve(n);
}