"Nehmen wir an, Sie wollen eine massive Platte aus Reihen von 4×1 und 6×1 Legosteinen bauen. Um die strukturelle Festigkeit zu gewährleisten, dürfen die Abstände zwischen den Steinen in benachbarten Reihen nicht übereinander liegen. Die unten gezeigte 18×3-Platte ist zum Beispiel nicht akzeptabel, weil die Abstände zwischen den Blöcken in den oberen beiden Reihen übereinander liegen.
Es gibt 2 Möglichkeiten, eine 10×1-Platte zu bauen, 2 Möglichkeiten, eine 10×2-Platte zu bauen, 8 Möglichkeiten, eine 18×3-Platte zu bauen, und 7958 Möglichkeiten, eine 36×5-Platte zu bauen.
Wie viele verschiedene Möglichkeiten gibt es, eine 64×10-Tafel zu bauen? Die Antwort passt in eine 64-Bit-Ganzzahl mit Vorzeichen. Schreiben Sie ein Programm, um die Antwort zu berechnen. Ihr Programm sollte sehr schnell laufen - auf jeden Fall sollte es nicht länger als eine Minute dauern, selbst auf einem älteren Rechner. Teilen Sie uns mit, welchen Wert Ihr Programm berechnet, wie lange es für die Berechnung gebraucht hat und auf welchem Rechner Sie es ausgeführt haben. Fügen Sie den Quellcode des Programms als Anhang bei. "
Ich habe vor kurzem ein Programmierrätsel bekommen und habe mir den Kopf zerbrochen, um es zu lösen. Ich habe einen Code mit C++ geschrieben und ich weiß, dass die Zahl riesig ist... mein Programm lief einige Stunden, bevor ich mich entschied, es einfach zu stoppen, weil die Anforderung 1 Minute Laufzeit war, selbst auf einem langsamen Computer. Hat jemand ein ähnliches Rätsel gesehen? Es ist schon ein paar Wochen her und ich kann es nicht mehr einreichen, aber es hat mich wirklich gestört, dass ich es nicht richtig lösen konnte. Hat jemand Vorschläge für Algorithmen, die man verwenden könnte? Oder vielleicht mögliche Lösungswege, die "außerhalb der Box" liegen. Ich habe mir ein Programm ausgedacht, das jede mögliche "Schicht" aus 4x1- und 6x1-Blöcken zu einer 64x1-Schicht zusammensetzt. Das waren dann etwa 3300 verschiedene Ebenen. Dann habe ich mein Programm durchlaufen lassen und sie zu allen möglichen 10 Schichten hohen Wänden gestapelt, die keine Risse haben, die sich aneinanderreihen ... wie Sie sehen können, würde diese Lösung eine lange, lange, lange Zeit dauern. Offensichtlich scheint rohe Gewalt nicht effektiv zu sein, um dieses Problem innerhalb der Zeitvorgabe zu lösen. Für Vorschläge/Einblicke wären wir sehr dankbar.
0 Stimmen
Soll es hier Bilder geben? Ich sehe keine. Ich vermute, das liegt daran, dass man keine Bilder posten darf, wenn man nicht mehr als 15 Rep hat.
0 Stimmen
Die ganzzahlige Partitionierung könnte ein Teil der Lösung sein: de.wikipedia.org/wiki/Ganzzahlige_Unterteilung
0 Stimmen
Ich glaube, Ihre Zahl von 3.300 ist falsch, sie liegt eher bei 47.000, basierend auf einem Programm, das ich erstellt habe. Vielleicht haben Sie die Reihenfolge nicht beachtet.
0 Stimmen
@Pax: Nein, er hat recht. 3328 Möglichkeiten. (Basierend nicht auf einem Programm, sondern einfacher Kombinatorik) Es gibt 10 Möglichkeiten, 1 Vierertafel und 10 Sechstafeln zu haben. Es gibt 495 Möglichkeiten, 4 Vierertafeln und 8 Sechstafeln zu haben (495 == 12 wähle 4). Es gibt 1716 Möglichkeiten, 7 Vierertafeln und 6 Sechstafeln zu haben (1716 == 13 wähle 7). Und so weiter. Erhöhe die Anzahl der Vierertafeln um 3 und verringere die Anzahl der Sechstafeln um 2. Addiere dann alle Möglichkeiten: 10 + 495 + 1716 + 1001 + 105 + 1 = 3228. (was ich mit "wählen" meine, siehe de.wikipedia.org/wiki/Kombination )
0 Stimmen
@Daniel, ich habe das Problem mit meinem Code (PEBCAK) gefunden. Eine kleine Änderung, es gibt 11 Möglichkeiten, 1x4+10x6 anzuordnen. Ansonsten sind Ihre Zahlen korrekt.
0 Stimmen
Positiv ist, dass ich eine Lösung gefunden habe, mit der ich zufrieden bin. Die negative Seite ist, dass ich deswegen eine Nacht nicht schlafen konnte. Danke!
0 Stimmen
Ja, ich habe viele schlaflose Nächte mit diesem Thema verbracht. Ich habe immer wieder versucht, einen Weg zu finden, es mit einer mathematischen Formel herauszufinden, anstatt mit roher Gewalt. Viele der Antworten, die die Leute gegeben haben, sind sehr hilfreich. Am meisten interessiert mich, ob jemand eine vernünftige Lösung mit C++ finden kann. Vielen Dank an alle!
0 Stimmen
@T.Flynn6 Haben Sie die Lösung für dieses Problem umgesetzt?