有n个数(n是不固定的,可变的)a[1],a[2]....a[n],对应的取值范围是0~v[n], 整数,求一段算法,列出这n个数的所有可能组合

解决方案 »

  1.   


    ...
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        procedure dfs(step:Integer);
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      data,a,b:array of integer;
      m:integer;
      n:Integer;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      i,j:Integer;
    begin
      //edit1.Text:='1,2,3,4,5,6,7';
      Memo1.Lines.BeginUpdate;
      Memo1.Clear;
      Memo1.Lines.Delimiter:=',';
      Memo1.Lines.DelimitedText:=edit1.Text;
      m:=Memo1.Lines.Count;
      SetLength(data,m+1);
      SetLength(a,m+1);
      Setlength(b,m+1);
      for i:=0 to memo1.Lines.Count-1 do
        data[i+1]:=StrToInt(Memo1.Lines[i]);
      memo1.Clear;  for i:=m downto 1 do
      begin
        for j:=0 to i do
        begin
          a[j]:=0;
          b[j]:=0;
        end;
        n:=i;
        dfs(1);
      end;
      Memo1.Lines.EndUpdate;
      SetLength(data,0);
      SetLength(a,0);
      SetLength(b,0);
    end;procedure TForm1.dfs(step: Integer);
    var
      i:integer;
      s:string;
    begin
      if step>n then
      begin
        s:='';
        for i:= 1 to n do
         s:=s+' '+inttostr(a[i]);    memo1.Lines.Add(s);
        exit;
      end;  for i:=1 to m do
        if b[i]=0 then
        begin
          a[step]:=data[i];
          if a[step-1]>a[step] then Continue;
          b[i]:=1;
          dfs(step+1);
          b[i]:=0;
        end;
    end;
    ...
      

  2.   

    是求C(n, 1)、C(n, 2) ... C(n, n) ?