Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
976to980
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
976to980
976to980
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Lösungen mit VBA

Lösungen mit VBA
17.05.2008 11:17:00
alifa
Hallo,
hier eine Aufgabe, die schon mal eingestellt wurde, doch nicht gelöst. Mit 16 Zahlen von 1 bis 100 sollen ALLE Zahlen von 1 bis 100 mit maximal 2 Zahlen gebildet werden. Z.B. 1=1; 2=1+1; 3=2+1....100= 50+50. Ich fand dieses Problem in einem alten Buch, aus einer Zeit, da VBA noch nicht bekannt war. Es gibt mehrere Lösungen. Mir ist es bis Dato nicht gelungen, ein funktionierendes Makro dafür zu basteln, obwohl ich manchmal den Eindruck hatte, nahe an der Lösung zu sein....
HG, alifa

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Lösungen mit VBA
17.05.2008 11:29:09
Sonnenpeter
Hallo,
zeig doch mal Deine Basteleien.
Gruß Sonnenpeter

AW: Lösungen mit VBA
18.05.2008 08:00:00
alifa
Hallo,
Mit dieser Routine ist es möglich, die 16 Zahlen zu prüfen. Im Direktfenster werden die Werte angezeigt, die nicht gebildet werden können, mit den 16 angenommenen Zahlen. Wenn im Direktfenster nichts angezeigt wird, bedeutet das, dass eine Lösung gefunden ist. Die Zahlen im Datenfeld sind willkürlich gewählt. Diese Zahlen (mit der 0 sind es 17) müssen so lange "erneuert" werden, bis es keine Zahl mehr gibt, die nicht gebildet werden kann, also im Direktfenster keine Zahl erscheint, nach der Ausführung der Routine. Mit Kombinatorik funktioniert das nicht, denn die Anzahl der Möglichkeiten (16 aus 100) ist immens.
Gruß, alifa

Public Sub aufruf()
pruefen (Array(0, 4, 5, 6, 7, 9, a, b, c, d, e, f, 57, 58, 59, 61, 62))
End Sub



Public Sub pruefen(a)
Dim i As Integer
Dim x As Integer
Dim y As Integer
Dim bol As Boolean
For i = 1 To 100
bol = False
For x = 0 To 16
For y = 0 To 16
If a(x) + a(y) = i Then
bol = True
End If
Next
Next
If bol = False Then Debug.Print i;
Next
End Sub


Anzeige
AW: Lösungen mit VBA
17.05.2008 14:07:44
Horst
Hi,
übersteit meine Vorstellungskraft. So wie du die Sache beschrieben hast, kann es keine
Lösung geben.
mfg Horst

AW: Lösungen mit VBA
17.05.2008 14:24:00
Reinhard
Hallo Horst,
so genau weiß ich auch nicht ob ich das richtig verstehe. In gewisser Weise erinnert mich das an eine Denksportaufgabe wo man eine Balkenwaage hat.
Gesucht ist dann die minimalste Anzahl an Einzelgewichten mit denen man dann 1 kg Schritten von 1 bis 100 kg alles abwiegen kann.
Und jetzt zur Aufgabe hier, mit den zahlen 1,2,3,4,5 also fünf Zahlen kann man lückenlos alle alle zaheln von 1-10 darstellen gemäß der Regel immer maximal 2 zahlen zu addieren.
1
1+1
1+2
1+3
1+4
1+5
2+5
3+5
4+5
5+5
Leider kann ich nicht abschätzen ob dies mit 16 zahlen für 1-100 auch gelingt.
Gruß
Reinhard

Anzeige
AW: Lösungen mit VBA
17.05.2008 23:47:00
Horst
Hi,
versuchs mal von oben nach unten, dann merkst du sehr schnell, dass das nicht gehen kann.
mfg Horst

Knobelei zum WE? Das glaub' ich nicht!...
18.05.2008 04:45:00
Luc:-?
...Es sind doch schon 16^2=256 Kombinationen von 16 Zahlen mit Wiederholung zur 2.Klasse möglich, Horst!
Dazu kommen noch die 16 Einzelwerte... Da könnte es durchaus möglich sein, dass sich so per Addition alle Zahlen von 1...100 bilden lassen.
Jetzt müssen nur noch die richtigen Zahlen gefunden und zuvor eine Strategie überlegt wdn. Ich kann nur hoffen, dass das nicht eins dieser besonders vertrackten Mathe-Probleme ist...
Das ist ja schon eine "Knobelei zum WE" ä la WF...
Gruß+schöSo!
Luc :-?

Anzeige
AW: Knobelei zum WE? Das glaub' ich nicht!...
18.05.2008 09:36:00
Horst
Hi,
"...Mit 16 Zahlen von 1 bis 100 sollen ALLE Zahlen von 1 bis 100 mit maximal 2 Zahlen gebildet werden..."
Wenn die Aufgabe so richtig formuliert ist, kann es nicht gehen.
mfg Horst

AW: Knobelei zum WE? Das glaub' ich nicht!...
18.05.2008 09:49:00
Caruso
Hallo Horst,
mit einem pauschalen "..kann es nicht gehen" wäre ich vorsichtig ohne mathematischen Beweis.
Ein erster manueller Versuch mit den Ziffern 49,51,1,2,4,8,16,32,46,42,25,7,13,60,69,86 ergibt bereits 83 mögliche Zahlen im Bereich 1-100 - auch wenn ich nicht an eine Optimierung bis zur 100 glaube, sollte die optimale Kombination deutlich näher an der 100 liegen, als du glaubst (oder ich in deine Aussage hineininterpretiere). Kombinatorik liefert manchmal ganz überaschende Ergebnisse.
Den endgültigen (Brute-Force-)Beweis werde ich bei 10^18 Möglichkeiten und begrenzter Rechenzeit verständlicherweise nicht führen.
LG
Carlo

Anzeige
Formellösung
22.05.2008 13:11:00
Luc:-?
Hallo Gemeinde,
hatte mich zwar bei der Anzahl der Kombinationen geirrt, aber habe inzwischen eine Formellösung gefunden, die mit der von Alifa inzwischen bekannt gegebenen Lösung, die eine gute Formelansatzmöglichkeit bietet, übereinstimmt. Habe diese Lösung ohne vorherige Kenntnis dieses Ergebnisses mit Trial&Error und anschließender manueller Datenstrukturanalyse gefunden.
Bei der Aufgabe scheint es sich um eine Variation der bekannten Aufgabe Addiere alle Zahlen von 1 bis 100 zu handeln. Deshalb bietet sich folgender Losungsansatz an...
1. Hinzufügen der 0 (1.Zahl der Lösung) → Anzahl der zu bildenden Zahlen wird ungerade und es wdn immer 2 Zahlen addiert, die - in 1.Zeile und 1.Spalte einer Matrix angeordnet - automatisch die Addition mit sich selbst (Verdopplung der Zahl) beinhalten.
2. Durch diese Null ergibt sich der Mittelwert aller Ergebniszahlen mit 50 → 17.=Endzahl der Lösung, denn 50+50=100.
3. Da aus der Analyse anzunehmen war, das die Lösungsreihe symmetrisch ist, sollte hier auch die Zahl 50/2=25 eine zentrale Rolle spielen... (17*25=425 → Summe aller positiven Differenzen aus allen Ergebniszahlen und einer Zahl der Lösungsreihe)
4. Die 1 ist unverzichtbar → so ergibt sich auch 2. Die nächste bisher fehlende Zahl wäre dann 3...
5. Ab 3+1=4 müssen die kleinsten bisher fehlenden Zahlen, die ja sonst keine Bildungsmöglichkeit mehr fänden, um 1 (die 1.Zahl der Lösungsreihe>0) vermindert wdn, um eine möglichst große "Additionsbreite" zu erreichen.
6. Auf diese Weise wird 25 als 9. (mittlere) von 17 Zahlen der Lösungsreihe erreicht. Von hier an wdn die Differenzen ("Abstände") der bereits ermittelten Zahlen der Lösungsreihe in umgekehrter Reihenfolge verwendet.
Userbild
Auf dieser Basis sollte es auch nicht schwer fallen, eine reine VBA-Lösung zu entwickeln, was ich ebenso wie eine exakte mathematische Beweisführung und das Finden evtl weiterer Lösungen gerne dem Forum überlasse... ;-)
Gruß Luc :-?
PS: Habe leider doch vergessen, die relativen Adressen der bedingten Formatierung (letzte 2 Formelzeilen) anzupassen (d.h., xlAutomatik rückgängig zu machen). Deshalb bitte B26 als A2 und B27 als B2 lesen!

Anzeige
AW: Formellösung
23.05.2008 10:36:00
Caruso
Hallo,
habe auch noch mal nachgedacht. (Puuhh, das war schwer)
Mein Ansatz wäre folgender:
1. "1" Bestandteil
2. eine Zahl der Reihe muss >= 50 (um die 100 darstellen zu können)
3. eine weitere Zahl muss >= 25 (um die 49 darstellen zu können)
4. bei aufsteigender Zahlenreihe gilt für das (n+1)-te Glied = maximal 2* (n)-te Glied +1
5. die ersten 14 Zahlen müssen mind. 1-25 darstellen können
6. die ersten 15 Zahlen müssen mind. 1-50 darstellen können
7. eine unvollständige x( Lösung analog dem 8-Damen-Problem
Ausgang: 14-zahlige Reihe von 1,2,3...,14
15. Zahl: 25
16. Zahl 50
wenn keine Lösung, dann erhöhe 16. Zahl - bis Lösung oder Abbruchkriterium (hier greift wohl zuerst 4.)
wenn keine Lösung, dann erhöhe 15. Zahl - setzte 16. Zahl auf max(15.Zahl+1;50) bis Lösung oder Abbruchkriterium (hier greift wohl zuerst 4.)
- wiederhole bis für 15. Zahl die 4. Abbruchbedingung greift.
- erhöhe 14. Zahl - Prüfe 5.,6.,7, - ....
- erhöhe 13. Zahl - Prüfe 5. 6.,7. - ...
d.h. in den ersten Zweigen des Lösungsbaums werden nur wenige Kombinationen ausgeschlossen (es greift zumeist nur 2. als Abbruch), aber es werden auch nur wenige geprüft.
je weiter man im Lösungsbaum nach oben steigt, desto häufiger greifen die Bedinungen 5.-7. und größere Äste werden komplett abgeschnitten.
Alternativ:
Löse das max.14-aus-14-mit-1-bis-14-Spiel - heißt alle Zahlenreihen mit max. 14 Zahlen aus 1-14, welche 1-14 darstellen können (sind max. 4864 Lösungen) - nur diese können das Spiel lösen.
Erweitere auf max.15-aus-15-mit-1-bis-15-Spiel und prüfe Bedingungen 1-7
Erweitere auf max.16-aus-16-mit-1-bis-16-Spiel und prüfe Bedingungen 1-7
Erweitere auf max.16-aus-17-mit-1-bis-17-Spiel und prüfe Bedingungen 1-7
Anfangs steigt die Anzahl der möglichen (Zwischen)Lösungen mit Faktor von fast 2 mit sinkender Tendenz, bei Erweiterung auf 25 ist der Faktor nur noch Ab ca. 70 ist der Faktor dann deutlich unter 1.
Problem ist hier nur das sinnvolle Verwalten der Zwischenlösungen und das clevere Merken der Prüfergebnisse der vorherigen Erweiterung, da hier Reihen mehrfach auf ähnliche Sachverhalte geprüft werden.
Nach grober Abschätzung dürfte zwischenzeitlich max. 10^9 Zwischenlösungen enstehen. Ob VBA dafür aus Performancegründen geeignet, keine Ahnung
LG
Carlo

Anzeige
Ja, hört sich auch ganz gut an,...
23.05.2008 14:58:11
Luc:-?
...Carlo,
aber die obere FmlLösung mit VBA zu realisieren, halte ich für nicht so kompliziert. Weitere Lösungen zu finden evtl aber doch... Hätte da jetzt auch keinen Ansatz... ;-)
Gruß+sWE!
Luc :-?
Setze mal auf offen, obwohl das wahrscheinlich auch nicht mehr das "Absinken" ins Archiv hinauszögern kann. Allerdings kommt man dann immer noch 'ne Weile mit neuen Beiträgen ran (war zumindest früher so), wenn man weiß wie's geht...

Ein paar Lösungsansätze dazu...
18.05.2008 15:49:15
NoNet
...und zahlreiche weitere Kommentare zu dieser Aufgabenstellung findest DU bzw. alle Interessierten hier :
http://spotlight.de/zforen/mse/m/mse-1208500244-30583.html
Gruß, NoNet
PS: NOCH ist dieser Thread erreichbar - aber wer weiß, wie lange noch ¿1?

Anzeige
AW: Ein paar Lösungsansätze dazu...
18.05.2008 23:01:40
Horst
Hi,
aber auch keine wirkliche Lösung dabei...
mfg Horst

AW: Lösungen mit VBA
19.05.2008 12:14:13
Reinhard
Hi Alifa,
du sagst es gibt mehrere Lösungen, kannst du die mal zeigen!?
Nur durch Ausprobieren kam ich mit den Zahlen
1, 2, 3, 4, 5, 6, 7, 15, 23, 31, 39, 47, 55, 63, 71, 79, 87, 95
bzw.
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 22, 33, 44, 55, 66, 77, 88, 99
bzw.
1, 2, 3, 4, 5, 6, 7, 8, 17, 26, 35, 44, 53, 62, 71, 80, 89, 98
schon bis über 100 aber leider sind das 18-19 Zahlen
Gruß
Reinhard

AW: Lösungen mit VBA
20.05.2008 07:31:00
alifa
Hallo Reinhard,
ich kenne mehrere Lösungen. Eine davon:1,3,4,9,11,16,20,25,30,34,39,41,46,47,49,50. Es muss doch möglich sein, ein VBA Makro zu konzipieren, welches alle möglichen Lösungen findet! Ich bin in vollem VBA Lernprozess, hoffe dass mir das eines Tages gelingt....Die anderen Lösungen möchte ich nicht bekannt geben, um nicht vielleicht doch einigen guten VBA- Kennern oder-Könnern, die Motivation zu nehmen. Bitte um Verständnis.
Gruß, Alifa

Anzeige
AW: Lösungen mit VBA
20.05.2008 09:59:00
Caruso
Hallo Alifa,
ein Brute-Force-Makro ist problemlos erstellt - damit werden dann auch alle Lösungen gefunden. Allein es fehlt dir die Lebenszeit, bis zum Ende des Durchlaufs zu warten. Es handelt sich hier um ein 16aus100-Lottospiel.
Die im Link von Nonet dargestellten Ansätze durchsuchen einen begrenzten Bereich mit einer geschickten Auswahl der Startparameter - dort werden dann halt nur die erstbesten Lösungen gefunden, aber damit ist kein Beweis der Vollständigkeit möglich.
Solange es dir nicht gelingt, den Suchbereich deutlich einzugrenzen (BSp. Zahl "1" ist logischerweise Pflichtbestandteil der Lösung , dann nur noch 15aus99-Lotto uswusf.) - no chance.
LG
Carlo

Anzeige
AW: Lösungen mit VBA
20.05.2008 14:59:56
Gerd
Hallo Alifa!

hier eine Aufgabe, die schon mal eingestellt wurde, doch nicht gelöst. Mit 16 Zahlen von 1 bis 100 sollen ALLE Zahlen von 1 bis 100 mit maximal 2 Zahlen gebildet werden.


Da Du hier eine Lösung ohne die Zahl 2 schreibst, hast Du die Aufgabe wohl nicht korrekt beschrieben.
Oder wie ermittelst Du die Summe = 3 mit maximal zwei Zahlen ohne die 2 als Summand?
Gruß Gerd

AW: Lösungen mit VBA
20.05.2008 16:07:34
Reinhard
Hallo Gerd,
m.E. bedeutet maximal zwei Zahlen daß man auch nur eine nehmen kann, halt die 3 in dem Fall, wie auch bei der 1 nur die 1...
Gruß
Reinhard

AW: Lösungen mit VBA
20.05.2008 19:48:27
alifa
Hallo Carlo,
Unten ist das Datenfeld von 1 begrenzt. Oben muss minimal 50 angenommen werden, um überhaupt 100 zu bilden. Nehmen wir mal 52 an. Dann sind die nächst kleinen Zahlen definiert, um 99,98, 97, ...bilden zu können. 47,48,49. Wenn man neben der 1 auch die 3 und 4 dazu nimmt, sieh es schon besser aus. Dann hätte man 9 aus 52. Es stimmt, so hat man nicht alle möglichen Lösungen...Ich überlege gerade, wie zusätzliche Bedingungen eingebaut werden können, um weniger prüfen zu müssen. Auch eine Zufallsziehung käme in Betracht....
Gruß, Alifa

AW: Lösungen mit VBA
20.05.2008 20:50:00
Caruso
Hallo Alifa
nur mal so kurz vor Archivierung des Beitrags ein paar mögliche Ansätze zur Eingrenzung des Suchraumes, ohne jetzt mal genau auszurechnen, ob dass schon für eine "endliche" Suchzeit ausreicht:
1. die "1" ist Pflicht
2. "2" und/oder "3" ist ebenfalls Pflicht, da nur mit ("1" und "2") oder ("1" und "3") oder ("1" und "2" und "3") die Ziffern von 1bis 3 darstellbar sind
3. Suche die minimale Anzahl notwendiger Zahlen, aus denen die Ziffern von 1bis50 darstellbar sind, 16 abzgl. dieser minimalen Zahl wäre der Suchraum für mögliche Lösungen mit Ziffern über der 50
Bsp. Mindestens 9 Zahlen (Annahme, ich hab sie nicht geprüft) sind notwendig, daraus folgt
du brauchst nur noch Zahlenkombinationen prüfen, in denen "1" + oder("2","3") + min. 7 Zahlen 50 vorhanden sind
um die Lösung für 3. zu finden, könntest du induktiv vorgehen, d.h ermittle die minimale Anzahl von Zahlen, die für die Darstellung von 1bis25 notwendig sind und Grenze damit die Suche für Zahlen >25 ein
etc für 15 oder noch kleiner.
Evtl. findest du ja einen sinnvollen Allgorithmus um von den Lösungen der kleinen Probleme die Lösungsmöglichkeiten der größeren Probleme abzuleiten, heißt nur Zahlenreihen mit Dadurch sparst du dir einige Zehnerpotenzen an möglichen Lösungen. Vielleicht reicht es dann ja schon.
LG
Carlo

Siehe meine FmlLösung oben! ;-) Gruß owT
22.05.2008 13:15:42
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige