记录编号 2608 评测结果 AAAAAAAAAA
题目名称 [NOIP 2007]Hanoi双塔问题 最终得分 100
用户昵称 Gravatarzhai 是否通过 通过
代码语言 Pascal 运行时间 0.002 s
提交时间 2008-09-23 13:59:41 内存使用 0.11 MiB
显示代码纯文本
program hanoi;
  const
    jin=10000;
  type
    gjd=array[1..20]of longint;
  var
    f1,f2:text;
    n:integer;
    a:gjd;
    procedure main(n:integer);
      var
        i,j,k:integer;
      begin
        fillchar(a,sizeof(a),0);
        a[20]:=2;
        for i:=2 to n+1 do begin
          for j:=20 downto 1 do a[j]:=a[j]*2;
          for j:=20 downto 2 do begin
            a[j-1]:=(a[j]div jin)+a[j-1];
            a[j]:=a[j]mod jin;
          end;
        end;
        i:=20;
        while (a[i]=0) and(i>1)do dec(i);
        if i<>20 then begin
          a[20]:=8;
          for j:=i to 19 do a[i]:=999;
        end
        else a[20]:=a[20]-2;
      end;
    procedure ini;
      begin
        assign(f1,'hanoi.in');reset(f1);
        assign(f2,'hanoi.out');rewrite(f2);
        read(f1,n);
        close(f1);
      end;
    procedure pr;
      var
        i,j,k,c,e:integer;
      begin
        i:=1;
        while(i<20)and(a[i]=0)do inc(i);
        write(f2,a[i]);
        for j:=i+1 to 20 do begin
          if a[j]div 1000<>0 then write(f2,a[j])
          else begin
            e:=10;c:=4;
            while (a[j]div e<>0)and(c>=1)do begin
              dec(c);
              e:=e*10;
            end;
            for e:=1 to c-1 do write(f2,0);
            write(f2,a[j]);
          end;
        end;
        writeln(f2);
      end;
  begin
    ini;
    if n=0 then writeln(f2,0)
    else begin
      main(n);
      pr;
    end;
    close(f2);
  end.