每个数之间要求用','隔开procedure TForm1.Button1Click(Sender: TObject); var s1,s2:string; str,str1:TStrings; i,j,m,n:Integer; begin s1:=Trim(self.Edit1.Text); s2:=Trim(self.Edit2.Text); if (s1='') or (s2='') then Exit; str:=TStringList.Create; str.Clear; str1:=TStringList.Create; str1.Clear; self.getn(s1,'',StrToInt(s2),str); i:=str.Count; self.Memo1.Lines.Clear; for j:=0 to i-1 do begin s1:=str.Strings[j]; self.Memo1.Lines.Add(s1); end; end;procedure TForm1.getn(ss, ss1: string; count: Integer; var str: TStrings); var i,j,m,n:Integer; s,s1,s2,s3:string; str1,str2:TStrings; begin str1:=TStringList.Create; str1.Clear; str2:=TStringList.Create; str2.Clear; ExtractStrings([','],[],PChar(ss),str1); i:=str1.Count; if i=0 then Exit; for j:=1 to i do begin s1:=str1.Strings[j-1]; if ss1='' then s3:=ss1+s1 else s3:=ss1+'|'+s1; str2.Clear; ExtractStrings(['|'],[],PChar(s3),str2); if str2.Count=count then begin str.Add(s3); Continue; end; s2:=''; for n:=j to i-1 do s2:=s2+str1.Strings[n]+','; Self.getn(s2,s3,count,str); end; end;
var
s1,s2:string;
str,str1:TStrings;
i,j,m,n:Integer;
begin
s1:=Trim(self.Edit1.Text);
s2:=Trim(self.Edit2.Text);
if (s1='') or (s2='') then
Exit;
str:=TStringList.Create;
str.Clear;
str1:=TStringList.Create;
str1.Clear;
self.getn(s1,'',StrToInt(s2),str);
i:=str.Count;
self.Memo1.Lines.Clear;
for j:=0 to i-1 do
begin
s1:=str.Strings[j];
self.Memo1.Lines.Add(s1);
end;
end;procedure TForm1.getn(ss, ss1: string; count: Integer; var str: TStrings);
var
i,j,m,n:Integer;
s,s1,s2,s3:string;
str1,str2:TStrings;
begin
str1:=TStringList.Create;
str1.Clear;
str2:=TStringList.Create;
str2.Clear;
ExtractStrings([','],[],PChar(ss),str1);
i:=str1.Count;
if i=0 then
Exit;
for j:=1 to i do
begin
s1:=str1.Strings[j-1];
if ss1='' then
s3:=ss1+s1
else
s3:=ss1+'|'+s1;
str2.Clear;
ExtractStrings(['|'],[],PChar(s3),str2);
if str2.Count=count then
begin
str.Add(s3);
Continue;
end;
s2:='';
for n:=j to i-1 do
s2:=s2+str1.Strings[n]+',';
Self.getn(s2,s3,count,str);
end;
end;
getn(ss, ss1: string; count: Integer; var str: TStrings);
ss:原m个数组成的字符串,每个数之间用','隔开;
ss1:分析出的数值字符串,初始值为空
count:就是那个n了
str:用于存放所有n个数组成的字符串队列
{1,2,3}; {1,2,4}; {1,3,4}; {2,3,4}.
C语法算法如下:
int n, r;
int C[5];
char used[5];
void combine(int pos, int h)
{
int i;
/*如果已选了r个元素了,则打印它们*/
if (pos==r) {
for (i=0; i<r; i++)
cout<< C[i];
cout<< endl;
return;
}
for (i=h; i<=n-r+pos; i++) /*对于所有未用的元素*/
if (!used[i]) {
/*把它放置在组合中*/
C[pos] = i;
/*使用该元素*/
used[i]++;
/*搜索第i+1个元素*/
combine(pos+1,i+1);
/*恢复递归前的值*/
used[i]--;
}
}