-
黑白棋子的移动(normal)
Time Limit:1000MS Memory Limit:65536K Total Submit:164 Accepted:48
Description
有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况: ○○○○○●●●●● 移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如n=5时,成为: ○●○●○●○●○● 任务:编程打印出移动过程。
Input
Output
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*
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.