codeves天梯 Hannoi双塔问题

给定A、B、C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:

(1)每次只能移动一个圆盘;

(2)A、B、C三根细柱上的圆盘都要保持上小下大的顺序;

任务:设An为2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An

分析:这题一开始没有太多的头绪,后来变手算结果发现前三个结果为2,2+4=6,2+4+8=14,于是猜测了递推式,为正解。

const
  maxn=500;

var
  a:array[0..maxn,0..maxn] of int64;
  n,j,i:longint;
  t:int64;

procedure mu1;
var
  g,i,b:longint;
  s:int64;
begin
  g:=0;
  b:=2;
  for i:=maxn downto 1 do
    begin
      s:=a[i,j-1]*b+g;
      a[i,j]:=s mod 10;
      g:=s div 10;
  end;
end;

procedure add;
var
  i:longint;
begin
  a[maxn,j]:=a[maxn,j]+2;
  for i:=maxn downto 1 do
    begin
      a[i-1,j]:=a[i-1,j]+a[i,j] div 10;
      a[i,j]:=a[i,j] mod 10;
  end;
end;

begin
  fillchar(a,sizeof(a),0);
  readln(n);
  j:=0;
  while j 
  

你可能感兴趣的:(codeves天梯)