黑白棋子的移动(normal) ssl 1310

本文通过一个具体的递归问题实例,详细展示了如何将较大问题逐步分解为较小子问题的过程,并提供了完整的伪代码实现。

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

这道题本质上是递归

n=7
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*

从这可以看出,先把n=7变成n=6,再把n=6变成n=5,以此类推。
代码如下:

var n,io,i,ans:longint;
    a:array[1..100] of char;
procedure print;
var i:longint;
begin
  write('step',ans:2,':');
  for i:=1 to io do write(a[i]);
  writeln;
  inc(ans);
end;
procedure move(m1,m2:longint);
var t:char;
begin
  t:=a[m1];a[m1]:=a[m2];a[m2]:=t;
end;
begin
  readln(n); io:=n*2+2;
  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]:='-'; print;
  while n>4 do
  begin
    move(n,2*n+1);move(n+1,2*n+2);print;
    move(2*n-1,n);move(2*n,n+1);print;
    dec(n);
  end;
  move(n,2*n+1);move(n+1,2*n+2);print;
  move(2*n,n);move(2*n+1,n+1);print;
  move(2,2*n);move(3,2*n+1);print;
  move(2*n-1,2);move(2*n,3);print;
  move(1,2*n-1);move(2,2*n);print;
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值