Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1380to1384
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Rekursiv am Sonntag

Rekursiv am Sonntag
28.09.2014 16:00:46
Alifa

Hallo,
wie kann man diese Aufgabe rekursiv(VBA) lösen? Gegeben die 3 Zahlen a=39; b=93;c=205. Diese sollen schrittweise verändert werden, bis zwei davon den gleichen Wert haben. Erlaubt ist die Verdoppelung der Zahlen. Bei der Verdoppelung einer Zahl wird deren Wert von einer anderen Zahl abgezogen. Ausgegeben werden soll so:(Beispiel)
39 93 205
78 93 166
156 93 88
63 186 88
63 98 176...und so weiter
Die Summe der 3 Zahlen bleibt gleich:337
Habe viel versucht, leider ohne Erfolg, deswegen: Kann mir jemand helfen?
Gruß Erhard

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Rekursiv am Sonntag
28.09.2014 22:13:45
Herbert Volkmann
Hallo Erhard,
nach welchem Kriterium wird entschieden, ob die 1. oder 2. oder 3. Zahl verdoppelt wird ?
Ist es immer die kleinste Zahl ? z.B. 39 - 93 - 205 hier wird die 39 verdoppelt.
Viele Grüße
Herby

AW: Rekursiv am Sonntag
29.09.2014 06:55:46
Alifa
Hallo Herby,
es geht über Versuch und Fehler. Händisch würde man versuchen mit der 39 zu beginnen. Falls es nicht klappt, mit der 93 weiter zu versuchen. Ich weiß auch nicht, ob es überhaupt, mit der gestellten Bedingung, eine Lösung gibt. Vielleicht könnte man mit einem nicht rekursiven Makro versuchen.
Gruß Erhard

AW: Rekursiv am Sonntag
29.09.2014 10:05:11
Peter
Hallo
Bei Änderung des Wertes für MaxLevel bekommst Du verschiedene Lösungen

Option Explicit
Const myval1 = 39
Const myval2 = 93
Const myval3 = 205
Const myMax = (myval1 + myval2 + myval3) / 2
Dim MyIteration As Long
Dim MaxLevel As Long
Function FindValue(m1, m2, m3 As Long, myLevel As Long) As Boolean
FindValue = False
MyIteration = MyIteration + 1
If myLevel = MaxLevel Then GoTo Done
If (m1 = m2) Or (m1 = m3) Or (m2 = m3) Then GoTo Found
If (m1 < myMax) Then
If m2 > m1 Then
If FindValue(m1 * 2, m2 - m1, m3, myLevel + 1) Then GoTo Found
End If
If m3 > m1 Then
If FindValue(m1 * 2, m2, m3 - m1, myLevel + 1) Then GoTo Found
End If
End If
If (m2 < myMax) Then
If m1 > m2 Then
If FindValue(m1 - m2, m2 * 2, m3, myLevel + 1) Then GoTo Found
End If
If m3 > m2 Then
If FindValue(m1, m2 * 2, m3 - m2, myLevel + 1) Then GoTo Found
End If
End If
If (m3 < myMax) Then
If m1 > m3 Then
If FindValue(m1 - m3, m2, m3 * 2, myLevel + 1) Then GoTo Found
End If
If m2 > m3 Then
If FindValue(m1, m2 - m3, m3 * 2, myLevel + 1) Then GoTo Found
End If
End If
GoTo Done
Found:
FindValue = True
Debug.Print m1, m2, m3
Done:
End Function
Sub Start()
Dim b As Boolean
MyIteration = 0
MaxLevel = 7
Debug.Print "--------------------"
b = FindValue(myval1, myval2, myval3, 0)
End Sub

Anzeige
AW: Rekursiv am Sonntag
30.09.2014 06:33:05
Alifa
Hallo,
vielen Dank, das klappt vorzüglich!
Erhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige