字符移动


日期:
2005-8-27 22:23:00
来源:
信息学奥林匹克
作者:
编辑
vivian
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 下一页

关闭窗口

   兆联特别申明
1)除本站特殊规定外,本站所有信息均不拥有版权,仅供学习参考!
2)站内大部分内容注明出处及详细信息,版权归作者所有!如果您觉得不妥请及时与我站联系,我们将立即删除。
3)本站提供的资料您只有阅读权,并不等于您得到文章的所有权,本站反对将我站提供的资料直接使用。