有一组数A,如:(1,4,4,3,6,2,5,9)
求该组数中元素之和为某一值m (如6 )的所有序列如:6=2+4,则(2,4)为一组合格要求的序列,则A关于m=6的序列共有以下几组
(1,2,3)
(1,5)
(2,4)及第二组(2,4)能否,找到一算法求出A关于m的所有组合呢,
(注意:数组A内的元素为浮点数,元素可重复)谢谢指点!不胜感激!
求该组数中元素之和为某一值m (如6 )的所有序列如:6=2+4,则(2,4)为一组合格要求的序列,则A关于m=6的序列共有以下几组
(1,2,3)
(1,5)
(2,4)及第二组(2,4)能否,找到一算法求出A关于m的所有组合呢,
(注意:数组A内的元素为浮点数,元素可重复)谢谢指点!不胜感激!
解决方案 »
- Delphi 中如何取某一进程所加载的所有dll?
- Delphi中对SQL语句格式化时如果IN语句后面是数组,用什么表示?
- 请问:ForceDirectories线程安全吗?
- 请问:TQuery组件的sql.text 是否有长度限制??
- 怎样得到另一个数据集中的子集啊?
- 送书《MoreEffectiveC++(WQ版).doc》推荐,想学C++的朋友不要错过了呀
- 如何编写在线升级的程序
- 如何控制Webbrowser中也面的上下左右移动
- 麻烦大家解释一个简单的问题
- 为什么老是出错??好奇怪!
- ado 的多线程查询,哪位给个例子,谢了先,在线等!
- 用Delphi做的程序都是直接运行的吗?是不是土了点?还说Delphi好?怎么和.NET比!!!!!
//有的才计算合计,最后的合计和目标相等就输出~~
//'000000000000' -> '000000000001' -> ... ... -> '111111111111'~~
//其实就是二进制的表达~~procedure TForm1.Button1Click(Sender: TObject);
procedure Calc(A: array of Real; mDest: Real);
var
I, L: Integer;
S, T, W: string;
K: Real; //合计
begin
L := Length(A);
if L <= 0 then Exit;
S := StringOfChar('0', Length(A)); //初始为000000000000
T := StringOfChar('1', Length(A)); //终止为111111111111
while S < T do begin for I := Length(S) downto 1 do //每次加~~
if S[I] = '1' then
S[I] := '0'
else begin
S[I] := '1';
Break;
end; K := 0;
W := '';
for I := 1 to Length(S) do
if S[I] = '1' then begin
K := K + A[Low(A) + I - 1];
W := Format('%s+%f(%d)', [W, A[Low(A) + I - 1], Low(A) + I - 1]);
end;
if Abs(K - mDest) <= 0.000000000001 then //浮点数不能直接判断相等~~
Memo1.Lines.Add(Copy(W, 2, MaxInt));
end;
end;
begin
Memo1.Clear;
Calc([1, 4, 4, 3, 6, 2, 5, 9], 6);
end;