zoukankan      html  css  js  c++  java
  • P1259 黑白棋子的移动

    题干

    题目链接:https://www.luogu.com.cn/problem/P1259

    题目描述

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

    ○○○○○●●●●●

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

    ○●○●○●○●○●

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

    输入格式

    一个整数n(n<=100)

    输出格式

    若干行,表示初始状态和每次移动的状态,用"o"表示白子,"*"表示黑子,"-"表示空行。

    输入输出样例

    输入 #1

    7
    

    输出 #1

    ooooooo*******--
    oooooo--******o*
    oooooo******--o*
    ooooo--*****o*o*
    ooooo*****--o*o*
    oooo--****o*o*o*
    oooo****--o*o*o*
    ooo--***o*o*o*o*
    ooo*o**--*o*o*o*
    o--*o**oo*o*o*o*
    o*o*o*--o*o*o*o*
    --o*o*o*o*o*o*o*
    

    思路

    分析样例

    将样例每两行分开一次:

    ooooooo*******--
    oooooo--******o*
    
    oooooo******--o*
    ooooo--*****o*o*
    

    这里可以明显的看到相应的规律:

    中间的"o*"与"--"交换
    最左边的"**"与"--"交换

    然而最后四行并非如此……

    特殊样例

    ooo*o**--*  o*o*o*
    o--*o**oo*  o*o*o*
    o*o*o*--o*  o*o*o*
    --o*o*o*o*  o*o*o*
        //在最后的4行结尾都是"o*o*o*"
        //"oo"与"--"交换
        //"--"与"*o"交换
        //"o*"与"--"交换
        //写代码时需要特判
    

    代码实现

    #include<iostream>
    using namespace std;
    char a[10000];
    int n,sp;
    void mv(int k)
    {
        for(int j=0;j<=1;j++)
        {
            a[sp+j]=a[k+j];
            a[k+j]='-';
        }
        sp=k;
        for(int i=1;i<=2*n+2;i++)
            cout<<a[i];
        cout<<endl;
    }
    void check(int x)
    {
        if(x==4){//等于4时进行特判
            mv(4);mv(8);mv(2);mv(7);mv(1);
        }
        else{
            mv(x);mv(2*x-1);check(x-1);
        }
    }
    int main()
    {
        cin>>n;
        sp=2*n+1;
        for(int i=1;i<=n;i++)a[i]='o';
        for(int i=n+1;i<=2*n;i++)a[i]='*';
        a[2*n+1]='-';
        a[2*n+2]='-';
        for(int i=1;i<=2*n+2;i++)
            cout<<a[i];
        cout<<endl;//先对于初始状态进行输出
        check(n);
    }
    
  • 相关阅读:
    python3.5: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory
    php回溯
    PHPredis长连接pconnect
    php操作redis出现不报错就退出
    MSMQ消息队列
    消息队列使用的四种场景介绍(准载)
    Spring MVC参数封装传递
    Spring MVC配置实例
    .NET项目中使用PostSharp
    C#进阶系列——AOP
  • 原文地址:https://www.cnblogs.com/Kyriech-Francis/p/Answer_P1259.html
Copyright © 2011-2022 走看看