从一个组合数的求解谈开去[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 leeky 的 blog

      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',执行试试,三十多万行的数据不断地滚出来了吧。

本文关键:算法 组合数 递归
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top