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;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值