我有六个数,比如1,2,3,4,5,6 要进行任意给合。
比如123456,654321,612345,213456,312456
怎么写这个算法。在线等,分可以再加。

解决方案 »

  1.   

    function Collocate(mStrings: TStrings; mStr: string): Boolean; { 全排列 }
      procedure pCollocate(mLeft, mRight: string);
      var
        I, L: Integer;
        Temp: string;
      begin
        L := Length(mLeft);
        if L = 0 then
          mStrings.Add(mRight)
        else for I := 1 to L do begin
          Temp := mLeft;
          Delete(Temp, I, 1);
          pCollocate(Temp, Concat(mRight, mLeft[I]));
        end;
      end;
    begin
      Result := False;
      if not Assigned(mStrings) then Exit;
      mStrings.BeginUpdate;
      try
        mStrings.Clear;
        pCollocate(mStr, '');
      finally
        mStrings.EndUpdate;
      end;
      Result := True;
    end; { Collocate }procedure TForm1.Button1Click(Sender: TObject);
    begin
      Collocate(Memo1.Lines, '123456')
    end;
      

  2.   

    给你个简单的:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      charSet: set of '1'..'9';
      i,j,count:integer;
      ch:char;
      str:string[6];
    begin
      for i:=100000 to 999999 do
      begin
        str:=IntToStr(i);
        count:=0;
        charSet:=['1','2','3','4','5','6'];
        for j:=1 to 6 do
        begin
          ch:=str[j];
          if ch in charSet then
          begin
            Exclude(charSet,ch);
            inc(count);
          end;
        end;
        if count=6 then
        begin
          Memo1.Lines.Add(str);
        end;
      end;
    end;