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;
如果复杂度太大的话,要讲究速度就要学学数值分析了。呵呵
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;
如果复杂度太大的话,要讲究速度就要学学数值分析了。呵呵
var i:integer;
begin
for i:=0 to lst.count-1 do
begin
if integer(lst[i])=integer then
效率应该很高。基础数据是按['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.
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是用来计算组合的
建议有空多去算法板块,那里高手好多
重贴算法如下,采用递归,效率高不高不知道。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.期待高手的算法。
学习...