60.(递推练习)黑白棋子

2230 黑白棋子

 

 时间限制: 1 s
 空间限制: 32000 KB
 题目等级 : 大师 Master
题目描述 Description

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

       ○○○○○●●●●●

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

       ○●○●○●○●○●

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

输入描述 Input Description

n

输出描述 Output Description

编程打印出移动过程。

样例输入 Sample Input

7

样例输出 Sample Output

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*

step 10:o*o*o*--o*o*o*o*

step 11:--o*o*o*o*o*o*o*

数据范围及提示 Data Size & Hint

n<20



代码:

#include

using namespace std;

#include

#include

char a[4][20]={"ooo*o**--*","o--*o**oo*","o*o*o*--o*","--o*o*o*o*"}; //最后四步是没有规律的,单独存下来,直接输出 

int n,step=0;

int main()

{

cin>>n;

int i=1;

while(i<=n-3)

{

if(step%2==0)

{

cout<<"step"<<setw(2)<<step<<":";//注意开始的step的格式是对齐两位输出 

  for(int j=1;j<=n-i+1;++j)

   printf("o");

  for(int j=1;j<=n-i+1;++j)

    printf("*");

    printf("--");

   for(int j=1;j<=i-1;++j)

   printf("o*");

   printf("\n");

   }

   step++;

  if(step%2==1)

  {

  cout<<"step"<<setw(2)<<step<<":";

  for(int j=1;j<=n-i;j++)

  printf("o");

  printf("--");

  for(int j=1;j<=n-i;j++)

  printf("*");

  for(int j=1;j<=i;++j)

  printf("o*");

  printf("\n");

  }

i++;  

step++;

}

cout<<"step"<<setw(2)<<step<<":";//最后四步是没有规律的,单独存下来,直接输出 

printf("%s",a[0]);

for(int j=1;j<=n-4;++j)

printf("o*");

printf("\n");

step++;

cout<<"step"<<setw(2)<<step<<":";

printf("%s",a[1]);

for(int j=1;j<=n-4;++j)

printf("o*");

printf("\n");

step++;

cout<<"step"<<setw(2)<<step<<":";

printf("%s",a[2]);

for(int j=1;j<=n-4;++j)

printf("o*");

printf("\n");

step++;

cout<<"step"<<setw(2)<<step<<":";

printf("%s",a[3]);

for(int j=1;j<=n-4;++j)

printf("o*");

printf("\n");

step++;

return 0;

}


posted @ 2016-03-11 18:38  csgc0131123  阅读(362)  评论(0编辑  收藏  举报