黑白棋子的移动(normal) 1310

来源:互联网 发布:宋仲基和杨洋长相知乎 编辑:程序博客网 时间:2024/05/16 13:04
  • 黑白棋子的移动(normal)

    Time Limit:1000MS  Memory Limit:65536KTotal 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]:='-';  prainend;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.
1 0