我的分法都是正确的,但是不是最优的~~
如何改进?
附程序:
program rq413;
type node=record
num:string;
zero:integer;
end;
var i,j,k,code:integer;
st,s2,s3,l:string;
f:array [1..80] of node;
function bj(x,y:string):boolean;
begin
while (length(x)>1) and (x[1]=’0’) do
delete(x,1,1);
while (length(y)>1) and (y[1]=’0’) do
delete(y,1,1);
if x=y then exit(false);
if length(x)=length(y) then exit(x>y);
if length(x)<length(y) then exit(false)
else exit(true);
end;
function check:boolean;
var s4,m,n:string;
begin
if s3=st then exit(true);
s4:=s3;
m:=copy(s4,1,pos(’,’,s4)-1);
delete(s4,1,pos(’,’,s4));
while pos(’,’,s4)>0 do
begin
n:=copy(s4,1,pos(’,’,s4)-1);
if (m=n) or bj(m,n) then exit(true);
m:=n;
delete(s4,1,pos(’,’,s4));
end;
if (m=s4) or bj(m,s4) then exit(true)
else exit(false);
end;
begin
readln(st);
for i:=1 to length(st) do
f[i].zero:=0;
f[1].num:=st[1];
f[2].num:=st[1]+st[2];
for i:=1 to length(st) do
for j:=i-1 downto 1 do
if bj(copy(st,j+1,i-j),f[j].num) then
begin
f[i].num:=copy(st,j+1,i-j);
s2:=copy(st,j+1,i-j);
while s2[1]=’0’ do
begin
f[i].zero:=f[i].zero+1;
delete(s2,1,1);
end;
break;
end;
i:=length(st);
s2:=st;
s3:=st;
while check and (f[i].num<>s2) do
begin
j:=i;
j:=j-length(f[i].num)+1;
insert(’,’,s3,j);
i:=j-1;
s2:=copy(st,1,i);
end;
writeln(s3);
end.