黑白棋子的移动(normal) 1310

本文介绍了一种通过编程实现黑白棋子从初始排列变为交替排列的算法。初始状态下,白色棋子位于左侧,黑色棋子位于右侧。文章详细展示了如何通过特定规则移动棋子,并给出了一个具体的例子,即当棋子数量为7时的移动步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 黑白棋子的移动(normal)

    Time Limit:1000MS  Memory Limit:65536K Total Submit:164 Accepted:48

    Description

      有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况: ○○○○○●●●●●   移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如n=5时,成为: ○●○●○●○●○●   任务:编程打印出移动过程。

    Input

    Output

    Sample Input

    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*
    

    Source

    elba


  • var
      n,st,sp:longint;
      a:array[1..10000]of char;
    
    procedure prain;
    var
      i:longint;
    begin
      write('step',st:2,':');
      for i:=1 to 2*n+2 do
        begin
          write(a[i]);
        end;
      writeln;
      st:=st+1;
    end;
    
    procedure init(n:longint);
    var
      i:longint;
    begin
      st:=0;
      sp:=2*n+1;
      for i:=1 to n do a[i]:='o';
        for i:=n+1 to 2*n do a[i]:='*';
      a[2*n+1]:='-';
      a[2*n+2]:='-';
      prain
    end;
    
    procedure move(k:longint);
    var
      i,j:longint;
    begin
      for j:=0 to 1 do begin
        a[sp+j]:=a[k+j];
        a[k+j]:='-';
      end;
      sp:=k;
      prain;
    end;
    
    procedure mv(n:longint);
    var
      i,k:longint;
    begin
      if n=4 then
      begin
        move(4);
        move(8);
        move(2);
        move(7);
        move(1);
      end
      else begin
             move(n);
             move(2*n-1);
             mv(n-1);
           end;
    end;
    begin
      readln(n);
      init(n);
      mv(n);
    end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值