A[n]是一个动态数组,float型。没有按照大小顺序排列,有重复值!
现想找出所有可能的组合求和等于指定值M。
返回所有组合的数组下标!
如果用递归的话,Delphi里面的程序完整代码怎么写~~谢谢咯!
现想找出所有可能的组合求和等于指定值M。
返回所有组合的数组下标!
如果用递归的话,Delphi里面的程序完整代码怎么写~~谢谢咯!
解决方案 »
- delphi7+SQL
- 再问,关于权限设置问题~~
- delphi5+win2000下自定义纸张的问题 。。。急等!!!(100分)
- 请问哪里有VisualReport5.0的安装程序?
- 两个delphi程序,在不同的地域,中间网络有防火墙,如何通讯
- 高分求购:如何做成象资源浏览器那样的信息管理方式?
- 我在一个从TGraphicControl派生的VCL控件中使用TTimer控件,可时钟事件不触发,怎么办?
- delphi能否用来开发实时性很强的与硬件打交道的程序???计算的精度够不够??
- 在用F1BOOK6时遇到的奇怪问题,求教
- 谁知道哪有《Rational Rose从入门到精通》和《UML参考手册》这两本电子书下载?我给22分
- 菜鸟级别学delphi
- 一个TreeView控件的和数据库的连接问题
var
A: array of Double;procedure TForm1.FindResult(M: Double);
var
N, i: Integer;
j, k: Integer;
S : Double;
R : array of Boolean;
begin
SetLength(R, High(A) + 1);
N := 1;
for i := 0 to High(A) do N := N * 2;
for i := 0 to N - 1 do
begin
k := i;
for j := 0 to High(A) do
begin
R[j] := k mod 2 = 1;
k := k div 2;
end;
S := 0;
for j := 0 to High(A) do
if R[j] then S := S + A[j];
if abs(S - M) < 1E-16 then
begin
//输出结果
Memo1.Lines.Add('========================');
for j := 0 to High(A) do
if R[j] then Memo1.Lines.Add(IntToStr(j));
end;
end;
R := nil;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
SetLength(A, 5);
A[0] := 1;
A[1] := 3;
A[2] := 4;
A[3] := 6;
A[4] := 8;
FindResult(11);
end;
FlagAry: array[0..0] of Integer;
NumAry: array[0..4] of Integer = (1, 2, 3, 4, 5);procedure Portfolio(m, n, SearchNum: Integer);
var
I, J, Num: Integer;
Str: string;
begin
for i := m downto n do
begin
FlagAry[n] := NumAry[i-1];
if (n > 1) then
Portfolio( i - 1, n - 1, SearchNum)
else
begin
Num := 0;
Str := '';
for J := FlagAry[0] downto 1 do
begin
Str := Str + IntToStr(FlagAry[J]);
Num := Num + FlagAry[J];
end; if Num = SearchNum then
Form1.Memo1.Lines.Add(Str);
end;
end;
end;调用
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
for I := 1 to Length(NumAry) do
begin
FlagAry[0] := i;
Portfolio(5, FlagAry[0], 6);
end;
end;结果
51
42
32141
32
这么写还是不太好,最大改成排列组合的组合数