for i := 1 to 5 do
begin
  for j := 0 to 4 do
  begin
    for k := 0 to i-1 do
    begin
     str := array[j];
     str := str + array[j+1];
    end;
  end;
end;
如果复杂度太大的话,要讲究速度就要学学数值分析了。呵呵

解决方案 »

  1.   

    hehe,帮你写一个穷举的算法。代码简单,但效率。。等着被人批吧。var lst:TList;function Indexof(number:integer);
    var i:integer;
    begin
       for i:=0 to lst.count-1 do
       begin
          if integer(lst[i])=integer then
          
      

  2.   

    做出来了。
    效率应该很高。基础数据是按['a'..'e']进行测试的。
    type
      TForm1 = class(TForm)
       
        Button2: TButton;
        listBox1: TListBox;
        procedure Button2Click(Sender: TObject);    function GetNextCombination(const origin:TList):TList;
        procedure FormCreate(Sender: TObject);
        private
        { Private declarations }
        ary:array[0..4] of char;  public
        { Public declarations }
      end;  TMyItem = class
        :integer;
        result:string;
      end;
    var
    Form1: TForm1;
    implementation
    {$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
    var lsttemp,lstTemp1:TList;
        itemTemp:TMyItem;
        i,j:integer;
    begin
       itemTemp:=TMyItem.Create;
       itemTemp.result:='';
       itemTemp.:=0;
       lstTemp:=TList.Create;
       lstTemp.Add(itemTemp);   for i:=0 to 4 do
       begin
       lstTemp1:=GetNextCombination(lstTemp);
       for j:=0 to lstTemp1.count-1 do
          ListBox1.items.add(TMyItem(lstTemp1[j]).result);
       lstTemp:=lstTemp1;
       end;
    end;procedure TForm1.ComboBox1Select(Sender: TObject);
    begin
       ShowMessage('fuck');
    end;function TForm1.GetNextCombination(const origin: TList): TList;
    var i,j:integer;
        lstTemp:TList;
        itemTemp:TMyItem;
    begin
        lsttemp:=tlist.Create();    for i:=0 to origin.Count-1 do
        begin
           for j:=TMyItem(origin[i]). to 4 do
           begin
             itemTemp:=TMyItem.Create;
             itemTemp.result:=TMyItem(origin[i]).result+ary[j];
             itemTemp.:=j+1;
             lstTemp.Add(pointer(itemTemp));
           end;
        end;    Result:=lstTemp;
    end;procedure TForm1.FormCreate(Sender: TObject);
    var i:integer;
    begin
        for i:=0 to 4 do
           ary[i]:=char(integer('a')+i);
    end;end.
      

  3.   

    其实不是很难,贴出我的代码program CalcCP;{$APPTYPE CONSOLE}uses
      SysUtils;  function CalcCn(const X, Y: Integer): Integer;
      var
        I: Integer;
        Denominator, Numerator: Integer;
      begin
        Denominator := 1;
        Numerator := 1;
        for I := (X - Y) + 1 downto 1 do Denominator := Denominator * I;
        for I := X downto Y do Numerator := Numerator * I;
        Result := Numerator div Denominator;
      end;var
      iLen, iSum: Integer;
      I: Integer;begin
      iSum := 0;
      Writeln('请出入数组长度:');
      Readln(iLen);
      for I := 1 to iLen do
        iSum := iSum + CalcCn(iLen, I);
      Writeln('结果是:', iSum);
    end.说明:函数CalcCP是用来计算组合的
      

  4.   

    hehe!看来delphi程序员算法真是不够达标。
    建议有空多去算法板块,那里高手好多
      

  5.   

    不好意思,审题审错了,惭愧的紧。
    重贴算法如下,采用递归,效率高不高不知道。program Project1;{$APPTYPE CONSOLE}uses
      SysUtils;var
      aryChars: array of Char;
      iLen, iSum, I: Integer;
      Str: string;  function CalcCombination(iCn, iPn: Integer): Integer;
      var
        I: Integer;
        Numerator, Denominator: Integer;
      begin
        Numerator := 1;
        Denominator := 1;
        //Calculate Denominator
        for I := iCn downto 1 do Denominator := Denominator * I;
        //Calculate Numerator
        for I := iPn downto iPn - iCn + 1 do Numerator := Numerator * I;
        Result := Numerator div Denominator;
      end;  procedure OutPutString(M, N, K: Integer; var S: string);
      var
        I: Integer;
        Num: Integer;
        S1: string;
      begin
        for I := M to N - K + 1 do
        begin
          Num := K - 1;
          S1 := S + aryChars[I - 1];
          if Num > 0 then
            OutPutString(I + 1, N, Num, S1)
          else
            Writeln(S1);
        end;
      end;
    begin
      Write('Please Input The Char Array''s Length: ');
      Readln(iLen);  SetLength(aryChars, iLen);
      Write('Please Input The Elements of Char Array: ');
      for I := 1 to iLen do
        Read(aryChars[I - 1]);  iSum := 0;
      for I := 1 to iLen do iSum := iSum + CalcCombination(I, iLen);
      Writeln('Number Of All Combination is: ', iSum);  Writeln('All Combination is: ');
      for I := 1 to iLen do
      begin
        Str := '';
        OutPutString(1, iLen, I, Str);
      end;  Readln;
    end.期待高手的算法。
    学习...