function ZsList(mStr: string): string; { 全排列 } procedure pZsList(mLeft, mRight: string);
var
I, L: Integer;
Temp: string;
begin
L := Length(mLeft);
if L = 0 then
Result := Result + mRight + #13#10
else for I := 1 to L do begin
Temp := mLeft;
Delete(Temp, I, 1);
pZsList(Temp, Concat(mRight, mLeft[I]));
end;
end; { [ZsList<pZsList>] }begin
Result := '';
pZsList(mStr, '');
end; { ZsList }function Power(Base, Exponent: Integer): Integer;
var
I: Integer;
begin
Result := 1;
for I := 1 to Exponent do
Result := Result * Base;
end; { Power }const
cScaleChar = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';function IntToDigit(mScale: Byte; mInt: Integer; mLen: Integer): string;
var
I, J: Integer;
begin
Result := '';
I := mInt;
while (I >= mScale) do begin
J := I mod mScale;
Result := Copy(cScaleChar, Succ(J), 1) + Result;
I := I div mScale;
end;
Result := Copy(cScaleChar, Succ(I), 1) + Result;
if mLen > 0 then
for I := Length(Result) to mLen - 1 do
Result := '0' + Result;
end; { IntToDigit }procedure TForm1.Button1Click(Sender: TObject);
var
I, J, L: Integer;
S, T, P: string;
begin
L := Length(Edit1.Text);
for I := 1 to Power(2, L) - 1 do begin
T := IntToDigit(2, I, L);
P := '';
for J := 1 to Length(T) do
if T[J] = '1' then P := P + Edit1.Text[J];
S := S + ZsList(P);
end;
with TStringList.Create do try
Text := S;
for I := 0 to Count - 2 do
for J := Count - 1 downto I + 1 do
if (Length(Strings[I]) > Length(Strings[J])) or
((Length(Strings[I]) = Length(Strings[J])) and
(Strings[I] > Strings[J])) then
Move(I, J);
Edit2.Text := StringReplace(Trim(Text), #13#10, ',', [rfReplaceAll]);
finally
Free;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := '1234';
end;
var
I, L: Integer;
Temp: string;
begin
L := Length(mLeft);
if L = 0 then
Result := Result + mRight + #13#10
else for I := 1 to L do begin
Temp := mLeft;
Delete(Temp, I, 1);
pZsList(Temp, Concat(mRight, mLeft[I]));
end;
end; { [ZsList<pZsList>] }begin
Result := '';
pZsList(mStr, '');
end; { ZsList }function Power(Base, Exponent: Integer): Integer;
var
I: Integer;
begin
Result := 1;
for I := 1 to Exponent do
Result := Result * Base;
end; { Power }const
cScaleChar = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';function IntToDigit(mScale: Byte; mInt: Integer; mLen: Integer): string;
var
I, J: Integer;
begin
Result := '';
I := mInt;
while (I >= mScale) do begin
J := I mod mScale;
Result := Copy(cScaleChar, Succ(J), 1) + Result;
I := I div mScale;
end;
Result := Copy(cScaleChar, Succ(I), 1) + Result;
if mLen > 0 then
for I := Length(Result) to mLen - 1 do
Result := '0' + Result;
end; { IntToDigit }procedure TForm1.Button1Click(Sender: TObject);
var
I, J, L: Integer;
S, T, P: string;
begin
L := Length(Edit1.Text);
for I := 1 to Power(2, L) - 1 do begin
T := IntToDigit(2, I, L);
P := '';
for J := 1 to Length(T) do
if T[J] = '1' then P := P + Edit1.Text[J];
S := S + ZsList(P);
end;
with TStringList.Create do try
Text := S;
for I := 0 to Count - 2 do
for J := Count - 1 downto I + 1 do
if (Length(Strings[I]) > Length(Strings[J])) or
((Length(Strings[I]) = Length(Strings[J])) and
(Strings[I] > Strings[J])) then
Move(I, J);
Edit2.Text := StringReplace(Trim(Text), #13#10, ',', [rfReplaceAll]);
finally
Free;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := '1234';
end;
???问题答完了????
???发贴deREN????
??????????????????????