in einem Rätsel-Forum wo ich häufig bin stiess ich auf dieses:
"Ihr habt alle natürlichen Zahlen von 1 bis 50 (inklusive) zur Verfügung.
Bildet nun aus diesen Zahlen eine möglichst lange Zahlenreihe.
Wobei folgendes gilt:
Jede Zahl muß entweder die Summe oder die Differenz der beiden Nachbarzahlen sein. (mit Ausnahme der ersten und der letzten Zahl der Reihe)
Jede Zahl darf aber nur ein mal vorkommen!"
Eine der dort geposteten Lösungen lautet:
41 25 16 9 7 2 5 3 8 11 19 30 49
Nun dachte ich mir, ich löse das mit Excel, was dort legitim ist, man schreibt im Betreff "Lösung" oder "Spoiler". dann weiß jeder dort wenn er weiter selbst rumrätseln will sollte er den Betreff nicht anklicken.
Aufgrund der Aufgabenstellung dachte ich mir, alle Zahlenreihen fangen mit drei Zahlen an, die den Bedingungen entsprechen, das sind 3600 Kombinationen.
So entstand nachfolgender Code. Leider ist da der Wurm drin, weil als Ergebnis:
10 2 12 1
angezeigt wird :-(
Ich habe den Code schon mehrmals abgeändert aber ich glaube sehr ich habe da einen Grundsatzdenkfehler drinnen und vermute den Fehler in der Funktion CheckBerechnung.
Danke ^ Gruß
Reinhard
Option Explicit
Sub tt()
Dim Anz As Long, arrDrei(3599), a As Integer, b As Integer, c As Integer
Dim N As Integer, NN As Integer, S, Kurz, Max, Gefunden
For a = 1 To 50
For b = 1 To 50
If a b Then
For c = 1 To 50
If c a And c b Then
If b = a + c Or b = Abs(a - c) Then
arrDrei(Anz) = a & " " & b & " " & c
Anz = Anz + 1
'MsgBox arrDrei(Anz - 1)
End If
End If
Next c
End If
Next b
Next a
For N = 0 To 3599
Kurz = arrDrei(N)
For NN = 1 To 50
Kurz = Kurz & " " & NN
If CheckDoppelt(Kurz) = True Then Exit For
If CheckBerechnung(Kurz) = False Then Exit For
S = Split(Kurz)
If Max