请教排列组合算法问题 ( 积分: 150 )

  • 主题发起人 主题发起人 lzh1018
  • 开始时间 开始时间
L

lzh1018

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现从26个字母中选出m个,然后组成3个字母为一组的组合。
如:从26个字母中选出了A,D,H,M,4各字母,组合结果如下:
A,D,H
A,D,M
A,H,M
D,H,M
要求:
1、每个组合中字母不重复,
2、组合时按26个字母的排序排列。
请高手们写一下代码,万分感激!
 
好象用递归能够实现
 
没说这4个字母是怎么选出来的,但组合却可以
function GetList(const Str: string; const iCount: Integer; Strs: TStrings): Integer;
var
S: string;

function GetAList: string;

function GetString: string;
begin
Result := S;
Delete(Result, 2, 1);
Strs.BeginUpdate;
try
while Length(S) > iCount - 1 do
begin
Strs.Add(Copy(S, 1, iCount));
Delete(S, iCount, 1);
end;
finally
Strs.EndUpdate;
end;
end;

begin
Result := S;
Delete(Result, 1, 1);
repeat
S := GetString;
until Length(S) < iCount;
end;

begin
Strs.Clear;
Result := 0;
if Length(Str) < iCount then Exit;
S := Str;`
if iCount = 1 then
repeat
Strs.Add(S[1]);
Delete(S, 1, 1);
until Length(S) < iCount
else
repeat
S := GetAList;
until Length(S) < iCount;
Result := Strs.Count;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := IntToStr(GetList('ADHM', 3, Memo1.Lines));
end;
 
我有一段代码,是用递归实现的,你可以看看,或许对你有帮助
procedure Button1Click(Sender: TObject);
procedure ClearA(var inputdata: array of Real;inputpos:integer;var outputdata:array of Real;outputpos:integer);
procedure Cb(var outputdata:array of Real);

procedure TForm1.Button1Click(Sender: TObject);
var
A,b:array of Real;
i,j:integer;
begin
SetLength(A,5);
a[0] := 5;
a[1] := 6;
a[2] := 7;
a[3] := 8;
a[4] := 9;
for j := 1 to 5 do
begin
SetLength(B,j);
ClearA(A,0,B,0);
end;

end;

procedure TForm1.ClearA(var inputdata: array of Real;inputpos:integer;var outputdata:array of Real;outputpos:integer);
var
I,r : Integer;
b : array of Real;
begin
for I := 0 to High(inputdata)-inputpos-High(outputdata)+outputpos do
begin
outputdata[outputpos] := inputdata[inputpos+i];
if(outputpos < High(outputdata))then
ClearA(inputdata,inputpos+1+I,outputdata,outputpos+1)
else
cb(outputdata);
end;
end;

procedure TForm1.Cb(var outputdata:array of Real);
var
I:integer;
begin
for I:=0 to High(outputdata) do
memo1.Lines.Add(floattostr(outputdata));
end;
 
谢谢各位的指点,我先学习一下.
 
谢谢!问题已解决.
 
谢谢!问题已解决.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部