1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
function target_sum(a: TArray<Integer>; k, x: Integer): TArray<TArray<Integer>>;
begin
if k = Length(a) then
Exit(nil);
if a[k] = x then
begin
SetLength(Result, 1, 1); // Result := [a[k]]; n'est pas supporté
Result[0, 0] := a[k];
Exit;
end;
var s := target_sum(a, k + 1, x);
var t := target_sum(a, k + 1, x - a[k]);
for var i := 0 to Length(t) - 1 do
begin
Insert(a[k], t[i], 0); // unshift
Insert(t[i], s, Length(s)); // push
end;
Result := s;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
var s := target_sum([1, 4, 5, 2, 7, 8, -3, -5, -6, 9, 3, -7, -1, 5, 6], 0, 0);
AllocConsole;
for var i := 0 to Length(s) - 1 do
begin
for var j := 0 to Length(s[i]) - 1 do
begin
Write(s[i, j], ',');
end;
WriteLn;
end;
end; |