Microsoft Excel

Herbers Excel/VBA-Archiv

Rekursiv am Sonntag

Betrifft: Rekursiv am Sonntag von: Alifa
Geschrieben am: 28.09.2014 16:00:46

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

  

Betrifft: AW: Rekursiv am Sonntag von: Herbert Volkmann
Geschrieben am: 28.09.2014 22:13:45

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


  

Betrifft: AW: Rekursiv am Sonntag von: Alifa
Geschrieben am: 29.09.2014 06:55:46

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


  

Betrifft: AW: Rekursiv am Sonntag von: Peter
Geschrieben am: 29.09.2014 10:05:11

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



  

Betrifft: AW: Rekursiv am Sonntag von: Alifa
Geschrieben am: 30.09.2014 06:33:05

Hallo,
vielen Dank, das klappt vorzüglich!
Erhard


 

Beiträge aus den Excel-Beispielen zum Thema "Rekursiv am Sonntag"