zoukankan      html  css  js  c++  java
  • 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(" ");

       }

       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(" ");

      }

    i++;  

    step++;

    }

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

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

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

    printf("o*");

    printf(" ");

    step++;

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

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

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

    printf("o*");

    printf(" ");

    step++;

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

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

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

    printf("o*");

    printf(" ");

    step++;

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

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

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

    printf("o*");

    printf(" ");

    step++;

    return 0;

    }


  • 相关阅读:
    Springboot~多个数据源时自定义datasource的bean
    springboot~aspose操作word模板实现导出功能
    spring-security-jwt的总结与实现
    mybatis+maven自动生成代码框架
    chrome 插件 vimium 像操作vim一样的操作浏览器
    递归计算过程和迭代计算过程
    找工作--Java相关
    《Linux程序设计》--读书笔记---第十三章进程间通信:管道
    poj 1474 Video Surveillance
    动态包含与静态包含的区别
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5370759.html
Copyright © 2011-2022 走看看