n个A与n个B(n≥4)排成一排, 开始时, 字符B全排在A的后面,然后将它移成
A,B 相间的情形: AAAABBBB → ABABABAB. 要求如下:
(1) 每次同时移动两相邻字符, 不得调换顺序.
(2) 总步数应尽量少.
program lxw003;
var i,n,step:integer;
s:array [1..100] of char;
procedure display;
var i:integer;
begin
write(’No.’,step:2,’ ’);
for i:=1 to 2*n+2 do write(s[i]);
writeln
end;
procedure move(i,k:integer);
var j:integer;
begin
step:=step+1;
for j:=0 to 1 do
begin s[k+j]:=s[i+j]; s[i+j]:=’ ’ end;
display
end;
begin{main}
repeat writeln(’input n:’); readln(n) until n>3;
step:=0;
for i:=1 to n do s[i]:=’A’;
for i:=n+1 to 2*n do s[i]:=’B’;
s[2*n+1]:=’ ’; s[2*n+2]:=’ ’;
display;
if n>4 then
for i:=n downto 5 do
begin move(i,2*i+1); move(2*i-1,i) end;
 此文共有2页 上一页 1 2 下一页 |