for i1:= 1 to 29 do
 for i2:=i1+1 to 29 do
  for i3:= i2+1 to 29 do
   for i4:=i3+1 to 29 do
    for i5:=i4+1 to 29 do
     for i6:=i5+1 to 29 do
      for i7:=i6+1 to 29 do
      begin
        ...
      end ;

解决方案 »

  1.   

    求组合的通用函数:
    Function zhuhe(n,k:integer):integer;
    var z,t:integer;
     Function jiechen(m:integer):integer;
     var i,h:integer;
     begin
     h:=1;
     for i:=1 to m do h:=h*i;
     jiechen:=h;
     end;
    begin
    z:=jiechen(n);
    t:=jiechen(k)*jiechen(n-k);
    zhuhe:=z div t;
    end;使用如下:zhuhe(29,7)
      

  2.   

    TO  forgot2000(忘记2000年) 回去我试试
    还有没有别的办法?
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        function GetAllChoose(Ret:TStrings):integer; //求出所有的解,存于字符串数组中,返回解的个数
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }function TForm1.GetAllChoose(Ret: TStrings):integer;
    var
      i,j,k,l,m,n,o:integer;
    begin
      Ret.Clear;
      for i:=1 to 23 do
       for j:=i+1 to 24  do
        for k:=j+1 to 25 do
         for l:=k+1 to 26 do
          for m:=l+1 to 27 do
           for n:=m+1 to 28 do
             for o:=n+1 to 29 do
               Ret.Add(Format('%d,%d,%d,%d,%d,%d,%d',[i,j,k,m,l,n,o]));
       Result:=Ret.Count;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
       GetAllChoose(Memo1.Lines);
    end;end.
      

  4.   

    这个算法并不费时,但是要显示出来费不少时间。
    如果不要动态效果,可以先用另一个Strings把结果存起来,再一次放到Memo1.Lines中。
      

  5.   

    program Project1;{$APPTYPE CONSOLE}uses
      SysUtils;procedure zhuhe(n,k:integer;str:string);
    var
      i:integer;
    begin
      if n = k then
      begin
        for i:=n downto 1 do
          str := inttostr(i) + ',' + str;
        writeln(str);
        exit;
      end;
      if k = 1 then
      begin
        for i:=1 to n do
          writeln(inttostr(i) + ',' + str);
        exit;
      end;
      zhuhe(n-1,k,str);
      zhuhe(n-1,k-1,inttostr(n) + ',' +str);
    end;begin
      zhuhe(29,7,'');
      readln;
    end.
      

  6.   

    在delphi 中 new -> other -> Console Application:program Project1;{$APPTYPE CONSOLE}uses
      SysUtils;procedure zhuhe(n,k:integer;str:string);
    var
      i:integer;
    begin
      if n = k then
      begin
        for i:=n downto 1 do
          str := inttostr(i) + ',' + str;
        writeln(str);
        exit;
      end;
      if k = 1 then
      begin
        for i:=1 to n do
          writeln(inttostr(i) + ',' + str);
        exit;
      end;
      zhuhe(n-1,k,str);
      zhuhe(n-1,k-1,inttostr(n) + ',' +str);
    end;begin
      zhuhe(29,7,'');
      readln;
    end.以上程序调试通过
      

  7.   

    我给你的那个程序是可以显示的啊,点一下按纽,结果就都在memo1里了。