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;

    }


  • 相关阅读:
    document.getElementById()使用方法
    Delphi XE7 发布时间
    JavaScript动态更改页面元素
    TCP/IP-协议族----17、应用层简单
    查看员工信息每个部门的最低工资
    VB6.0“挑衅”.NET!
    MapReduce计数器
    Linux学习记录--命名管道通信
    cocos2d-x V3.0 呼叫加速度计 Acceleration
    Linux Kernel(Android) 加密算法汇总(四)-应用程序调用OpenSSL加密演算法
  • 原文地址:https://www.cnblogs.com/csgc0131123/p/5290347.html
Copyright © 2011-2022 走看看