n个数取其中m个数的组合的遍历代码

最近写个函数,就是组合的遍历。比如,10个数,取3个数的所有组合,都知道,用一个3重循环好、是最简单的。不过要是通用一点的话,n个数,取m个数的所有组合。m个循环就不好写了,循环的深度无法用变量,因此写了一个小循环来做

Delphi 的例子 

 

 
  

procedure TfrmCompose.btn1Click(Sender: TObject); var x: array of Integer; i, j, n, m: Integer; k: array of Integer; s: string; jw: Boolean; begin n := StrToInt(edt1.Text); m := StrToInt(edt2.Text); SetLength(x, n); SetLength(k, m); for i := 0 to n - 1 do x[i] := i + 1; for i := 0 to m - 1 do k[i] := i; mmo1.Lines.BeginUpdate; mmo1.Clear; while True do begin //取得组合下标 s := ''; for i := 0 to m - 1 do s := s + Format('%.2d',[x[k[i]]]) + ','; mmo1.Lines.Add(s); //实际应用中应调用相应的函数 jw := True; for i := m - 1 downto 0 do begin if jw then begin k[i] := k[i] + 1; for j := i + 1 to m - 1 do begin k[j] := k[j - 1] + 1; end; jw := k[i] >= n + i - (m - 1); end else Break; end; if jw then Break; end; mmo1.Lines.EndUpdate; end;

 

你可能感兴趣的:(编程语言)