Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
Delphi 11 Alexandria
|
AW: Interessante (?) Frage Kombinatorik
25. Aug 2024, 22:31
Lösung via Rekursion.
In s gibst du die gewünschte Summe an, in v die Anzahl der gewünschten Vektorelemente.
Wie erwähnt: Es geht auch iterativ, indem du von 1..n tief d zählst und aus jeder Nummer einen Vektor erzeugst.
Delphi-Quellcode:
procedure ZoZ(n, d: Integer; var A: array of Integer; i, m: Integer; var res : TStringList );
var
j: Integer;
hs, s : string;
begin
A[i] := m;
if i = d then
begin
s := '';
for j := 1 to n-d do
s := s + IntToStr(A[j]-A[j-1]-1) + ' ';
res.Add(s);
end
else
for j := m + 1 to n do ZoZ(n, d, A, i + 1, j,res);
end;
procedure TForm131.Button1Click(Sender: TObject);
var A : array of integer;
s, v, n, d : integer;
res : TStringList;
begin
s := 4; // Die Summe der Vektorelemente soll s ergeben.
v := 4; // Der Vektor soll v Elemente enthalten.
d := v-1;
n := s+d;
setlength(A,d+2);
A[0] := 0;
A[d+1] := n+1;
res := TStringList.Create;
ZoZ( n, d, A, 0, 0, res );
ShowMessage( res.Text );
res.Free;
end;
Michael Gasser
Geändert von Michael II (26. Aug 2024 um 01:10 Uhr)
|
|
Zitat
|