Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1148to1152
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

Zahlenreihe nach bestimmten Regeln filtern

Zahlenreihe nach bestimmten Regeln filtern
Reinhard
Hallo Wissende,
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 

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Zahlenreihe nach bestimmten Regeln filtern
03.04.2010 19:28:50
ChristianM
Hallo Reinhard,
nachdem du die möglichen 3er Kombinationen aufgestellt hast, musst du mit jeder einzeln dieser Kombinationen von vorne starten und zB in einen Loop alle weiteren durchlaufen.
Dabei bilden die letzten beiden Zahlen jeweils die ersten beiden der nächsten anzuhängenden 3er Kombination.
Bei deinem Code sehe ich in dem zweiten Block aber nur eine Doppelschleife:

For N = 0 To 3599
For NN = 1 To 50
und keinen Loop.
statt dem CheckDoppelt würde ich mit Instr auf doppelte prüfen.
Wenn ich das mal so durchteste, dann stimmt die von dir genannte Lösung, das ist die einzige Zahlenreihe mit 13 Zahlen. Eine weitere symetrische Lösung ist der selbe Pattern in umgekehrter Reihenfolge.
Gruß
Christian
Anzeige
AW: Zahlenreihe nach bestimmten Regeln filtern
06.04.2010 21:37:31
Reinhard
Hallo Christian,
danke dir für deine Mühe.
Gruß
Reinhard

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige