讨论 / 囧啊
abcwuhang 2009-10-05 06:47:00
点我顶贴 收藏 删除
如何做?

我的分法都是正确的,但是不是最优的~~

如何改进?

附程序:

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.

查看更多回复
提交回复