关于Delphi求组合的问题
假定我通过Mome1输入求组合的数字,形式为:01,02,03,04,05(有可能不止五个,个数没有固定和统一的。)
按下Button1能把输入的组合出来每三个为一组合,显示形式为:
01-02-03; 01-02-04; 01-02-05; 01-03-04; 01-03-05;
01-04-05; 02-03-04; 02-03-05; 02-04-05; 03-04-05
delphi代码如何实现?谢谢!
[解决办法]
说了参考http://bbs.csdn.net/topics/401579,稍微修改下就是了,输出在memo里
procedure TForm1.btn1Click(Sender: TObject);
begin
mmo1.Text := ZsList('abcd')
end;
function TForm1.ZsList(mStr: string): string; { 全排列 }
procedure pZsList(P : Integer;mLeft, mRight: string);
var
I, L: Integer;
Temp: string;
begin
L := Length(mLeft);
if L = Length(mStr)-3 then
Result := Result + mRight + #13#10
else for I := P to L do begin
Temp := mLeft;
Delete(Temp, I, 1);
pZsList(I,Temp, Concat(mRight, mLeft[I]));
end;
end; { [ZsList<pZsList>] }
begin
Result := '';
pZsList(1,mStr, '');
end; { ZsList }
var
I, J, K,l: Integer;
s:string;
begin
l:=0;
memo2.Lines.Clear;
for I := 0 to memo1.Lines.Count - 1 do
begin
for J := I + 1 to memo1.Lines.Count - 1 do
begin
for K := J + 1 to memo1.Lines.Count - 1 do
begin
Inc(l);
s:=s+memo1.Lines[I]+'-' +memo1.Lines[j]+'-' +memo1.Lines[k]+' ';
if l>3 then
begin
memo2.Lines.Add(s);
l:=0;
s:='';
end;
end;
end;
end;
end;
