NEIN
Da mus ich dir wiedersprechen.
Was passiert wenn du die erste Zahl Negativ brauchst ??
Ich fand das so witzig das ich es mal Geproggt hab, geht ja schnell.
Nur kriege ich es einfach nicht Rekursiv hin.
Hier also meine Itterative Lösung.
Edit 1 - 5 die Zahlen Edit 6 das Erg
Label7 die Ausgabe
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Var
j, i: Integer;
zahlen: Array[0..5] Of integer;
erg: Integer;
Begin
For i := 1 To 6 Do
Zahlen[i - 1] := strtoint(Tedit(findcomponent('Edit' + inttostr(i))).text);
For i := 0 To 31 Do Begin
erg := 0;
// Berechnen des Ergebnisses
For j := 0 To 4 Do Begin
If i And (1 Shl j) = (1 Shl j) Then
erg := erg + Zahlen[j]
Else
erg := erg - Zahlen[j];
End;
// Prüfen
If erg = Zahlen[5] Then Begin
// Ausgabe
Label7.caption := '';
// Berechnen des Ergebnisses
For j := 0 To 4 Do Begin
If i And (1 Shl j) = (1 Shl j) Then
label7.caption := label7.caption + '+' + inttostr(Zahlen[j])
Else
label7.caption := label7.caption + '-' + inttostr(Zahlen[j])
End;
label7.caption := label7.caption + '=' + inttostr(Zahlen[5]);
// Fertig
break;
End;
End;
End;
[Edit]
Also ein Kumpel von mir dem ich grad Proggen bei Bringe hat hier mal nen Mega Krassen Ansatz gebracht.
Der ist im Mittel sogar schneller, schauts euch einfach mal an.
Nur wie man schnell sehen kann, terminiert dieser Algorithmus nicht wenn man das Ergebnis nicht Korreckt eingibt
Delphi-Quellcode:
Procedure TForm1.Button3Click(Sender: TObject);
Var
j, i: Integer;
zahlen: Array[0..5] Of integer;
erg: Integer;
Begin
c := 0;
erg := 0;
Label7.caption := '';
For i := 1 To 6 Do Begin
Zahlen[i - 1] := strtoint(Tedit(findcomponent('Edit' + inttostr(i))).text);
If i < 6 Then
erg := erg + Zahlen[i - 1];
End;
While erg <> Zahlen[5] Do Begin
inc(c);
i := random(5);
Zahlen[i] := Zahlen[i] * -1;
erg := 0;
For j := 0 To 4 Do
erg := erg + Zahlen[j];
End;
// Ausgabe
For j := 0 To 4 Do Begin
If Zahlen[j] > 0 Then
label7.caption := label7.caption + '+' + inttostr(Zahlen[j])
Else
label7.caption := label7.caption + inttostr(Zahlen[j])
End;
label7.caption := label7.caption + '=' + inttostr(Zahlen[5]);
End;
[Edit2]
Endlich hab ichs auch Rekursiv hinbekommen, da ists aber net so hübsch wie ich finde.
Delphi-Quellcode:
Procedure TForm1.Button4Click(Sender: TObject);
Var
j, i: Integer;
zahlen: Array[0..5] Of integer;
erg: Integer;
Procedure Rekursion(Tiefe: Integer);
Var
j: Integer;
Begin
If Tiefe < 5 Then Begin
Rekursion(Tiefe + 1);
erg := 0;
For j := 0 To 4 Do
erg := erg + Zahlen[j];
If erg <> Zahlen[5] Then Begin
Zahlen[Tiefe] := Zahlen[Tiefe] * -1;
Rekursion(Tiefe + 1);
End;
End;
End;
Begin
Label7.caption := '';
erg := High(Integer);
For i := 1 To 6 Do
Zahlen[i - 1] := strtoint(Tedit(findcomponent('Edit' + inttostr(i))).text);
Rekursion(0);
// Ausgabe
If Erg = Zahlen[5] Then Begin
For j := 0 To 4 Do Begin
If Zahlen[j] > 0 Then
label7.caption := label7.caption + '+' + inttostr(Zahlen[j])
Else
label7.caption := label7.caption + inttostr(Zahlen[j])
End;
label7.caption := label7.caption + '=' + inttostr(Zahlen[5]);
End;
End;