📄 sunnypig闯罗塔关.pas
字号:
program han;
type
shu=array[0..100] of longint;
var
hanoita:array[0..200,false..true] of shu;
s:string;
f:array[0..200] of shu;
a:array[0..200] of longint;
i,j,k,n,m:longint;
use:boolean;
ans:shu;
operator *(b:longint;a:shu)c:shu;
var
i,k:longint;
begin
fillchar(c,sizeof(c),0);
k:=0;
for i:=1 to a[0] do
begin
k:=k+a[i]*b;
c[i]:=k mod 10000;
k:=k div 10000;
end;
c[0]:=a[0];
if k<>0 then
begin
inc(c[0]);
c[c[0]]:=k;
end;
end;
operator +(a:shu;b:longint)c:shu;
var
i,k:longint;
begin
fillchar(c,sizeof(c),0);
k:=b;
for i:=1 to a[0] do
begin
k:=k+a[i];
c[i]:=k mod 10000;
k:=k div 10000;
end;
c[0]:=a[0];
if k<>0 then
begin
inc(c[0]);
c[c[0]]:=k;
end;
end;
operator +(a,b:shu)c:shu;
var
i,k,t:longint;
begin
fillchar(c,sizeof(c),0);
k:=0;
if a[0]>b[0] then t:=a[0] else t:=b[0];
for i:=1 to t do
begin
if i<=a[0] then k:=k+a[i];
if i<=b[0] then k:=k+b[i];
c[i]:=k mod 10000;
k:=k div 10000;
end;
c[0]:=t;
if k<>0 then
begin
inc(c[0]);
c[c[0]]:=k;
end;
end;
function change(x:longint):shu;
begin
fillchar(change,sizeof(change),0);
change[0]:=1;
change[1]:=x;
end;
procedure writelnshu(a:shu);
var
i:longint;
begin
write(a[a[0]]);
for i:=a[0]-1 downto 1 do
begin
write(a[i] div 1000);
a[i]:=a[i] mod 1000;
write(a[i] div 100);
a[i]:=a[i] mod 100;
write(a[i] div 10);
write(a[i] mod 10);
end;
writeln;
end;
function hanoi(n:longint;flag:boolean):shu;
begin
if n=1 then
case a[1] of
1: if flag then exit(change(0)) else exit(change(2));
2: exit(change(1));
3: if flag then exit(change(2)) else exit(change(0));
end;
case a[n] of
1: begin
if flag then hanoi:=hanoita[n-1,true]
else hanoi:=2*f[n-1]+2+hanoita[n-1,false];
end;
2: hanoi:=f[n-1]+1+hanoita[n-1,not flag];
3: begin
if flag then hanoi:=2*f[n-1]+2+hanoita[n-1,true]
else hanoi:=hanoita[n-1,false];
end;
end;
end;
begin
f[0]:=change(0);
for i:=1 to 200 do
begin
f[i]:=f[i-1];
f[i]:=f[i]+f[i-1];
f[i]:=f[i]+f[i-1];
f[i]:=f[i]+2;
end;
readln(n);
while n<>0 do
begin
readln(s);
for i:=1 to n do
a[i]:=ord(s[n-i+1])-64;
for i:=1 to n-1 do
begin
hanoita[i,true]:=hanoi(i,true);
hanoita[i,false]:=hanoi(i,false);
end;
ans:=hanoi(n,true);
writelnshu(ans);
readln(n);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -