黑白棋子移动

问题 F: 黑白棋子移动

时间限制: 1 Sec   内存限制: 128 MB

题目描述


2n个棋子( n4)排成一行,开始位置为白子全部在左边,黑子全部在右边,如下图为 n=5的情形:

   ○○○○○●●●●●

   移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如n=5时,成为:

    ○●○●○●○●○●

任务:编程打印出移动过程。


输入

输入一行n

输出

移动过程

样例输入

7

样例输出

step 0:ooooooo*******--
step 1:oooooo--******o*
step 2:oooooo******--o*
step 3:ooooo--*****o*o*
step 4:ooooo*****--o*o*
step 5:oooo--****o*o*o*
step 6:oooo****--o*o*o*
step 7:ooo--***o*o*o*o*
step 8:ooo*o**--*o*o*o*
step 9:o--*o**oo*o*o*o*
step10:o*o*o*--o*o*o*o*
step11:--o*o*o*o*o*o*o*


#include
#include
#include
#include
#include
#include
using namespace std;
int n;


int s;
void move(int k)
{
  cout<<"step";       
      printf("%2d",s);
      cout<<":";
      s++;
   for(int i=1;i<=k;i++)
   cout<<'o'; 
   for(int i=1;i<=k;i++)
      cout<<'*';
     cout<<"--";
   for(int i=2*n-2*k;i>0;i-=2)
    cout<<"o*";
    cout<0;i-=2)/!!!!!!!!!!!<=
    {
     cout<<"o*";      
    }
    //cout<<"  "<=8)
    {
   
      move(k/2);mv(k-2);     
    }
    if(k==8)
    {
    cout<<"step";printf("%2d",s);cout<<":";s++;
    cout<<"ooo*o**--*";
    for(int i=2*n-8;i>0;i-=2)/!!!!!!!!!!!<=
    {cout<<"o*";}
    cout<0;i-=2)/!!!!!!!!!!!<=
    {cout<<"o*";}
    cout<0;i-=2)/!!!!!!!!!!!<=
    {cout<<"o*";}
    cout<0;i-=2)/!!!!!!!!!!!<=
    {cout<<"o*";}
    cout<	cin>>n;
	mv(2*n);
    //mem();
    //cout<

你可能感兴趣的:(黑白棋子移动)