procedure MyRecur(Total,SelCnt,BLoc,ELoc:integer);
var
idx,jjj:integer;
tmpStr:string;
begin
if (ELoc=Total) // 终止状态
then begin
for idx:=BLoc to ELoc do
begin
GIDX[SelCnt+ELoc-Total]:=idx; // 注意此处应与下面 8888处一致
tmpStr:='';
for jjj:=1 to SelCnt do tmpStr:=tmpStr+IntToStr(Value[GIDX[jjj]])+' ';
Form1.Memo1.Lines.Add(tmpStr);
end;
end
else begin
for idx:=BLoc to ELoc do
begin
GIDX[SelCnt+ELoc-Total]:=idx; // 8888
MyRecur(Total,SelCnt,idx+1,ELoc+1);
end;
end;
end;
procedure SelNumber(Total,SelCnt:integer);
begin
if (Total<1) or (Total<SelCnt)
then begin
ShowMessage('数据不正确!');
Exit;
end;
MyRecur(Total,SelCnt,1,Total-SelCnt+1); // 最初第三个参数总为1
end;
使用:
procedure TForm1.Button3Click(Sender: TObject);
var
ttl,sel:integer;
begin
Memo1.Clear;
ttl:=StrToInt(Edit1.Text); // 请自己加上对TEdit的容错处理。
sel:=StrToInt(Edit2.Text);
SelNumber(ttl,sel);
end;
好了,在Edit1中输入‘100’,在Edit2中输入'3',执行试试,三十多万行的数据不断地滚出来了吧。
建议在计算前先估算一下共多少组合,最好不要超过10万。
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。