| Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann. |
Diskussion: Eimerproblem im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Das Rätsel hat bestimmt schon fast jeder mal gesehen: http://www.okkd.de/kd-web/raetsel/eimer.php Also 2 Eimer mit X,Y Liter Fassungsvermögen, mit denen ...
![]() |
| | #1 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Anzeige Das Rätsel hat bestimmt schon fast jeder mal gesehen: http://www.okkd.de/kd-web/raetsel/eimer.php Also 2 Eimer mit X,Y Liter Fassungsvermögen, mit denen man Z Liter abemessen muss. Klassisches Beispiel: Eimer A fasst 3, Eimer B 5 Liter. Wie kann man 4 Liter abmessen? Mögliche Lösung : fuelle:A=5, (von:A, inh:5>>B,inh:0), leere:B, (von:A,inh:2>>B,inh:0), fuelle:A=5, (von:A,inh:5>>B,inh:2), leere:B Habo Frage: einfach: 1)´Eimer A: 25l, B: 13l Wir brauchen 22 Liter. Sollte in 19 Schritten möglich sein mittel: 2) Eimer A: 15: B:13, gesucht: 20 Liter. 15 Schritte müssten es sein. 3) Eimer A:1550,B:1320, Gesucht: 2000L. 89 Schritte (nun aber wirklich per Hand nicht mehr mit vertretbarem Zeitaufwand lösbar schwer: 4) A: 50, B:33, Gesucht:10 Liter Wieviele Schritte hat die kleinste Lösung? Edit: Vorschlag für die Ausgabe: Eimer eindeutig durch Kleinbuchstaben bezeichnen, jeden Schritt durch ein Komma trennen, Namensgebung der Schritte: Füllen: fuelle(Bez) Leeren: leere(Bez) Umfüllen: Bez:AktuellerInhalt>>Bez:AktuellerInhalt Bsp für 5 und 3 Liter: [fuelle(a), a:5>>b:0, leere(b), a:2>>b:0, fuelle(a), a:5>>b:2, leere(b)] Wer sich daran hält, kann den kleiner verifier nutzen (Sicstus, GNU Prolog oder SWI vorausgesetzt nutzung,code
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) | |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | @Foxalem: wir sind im "Programmieraufgaben" Unterforum Code & Lösungen, die man durch diesen Code bekommen hat, sind willkommen Zu 1: wenn Du es im Format: Zitat:
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. | |
| | |
| | #4 (permalink) |
| Ehm jo xD sorry ^^ ich hab mir kurz den taschenrechner hergenommen und das hingedaddelt. Nu verstehe ich auch warum da steht (dass man es nicht mit der hand macht) Tut mir leid | |
| | |
| | #5 (permalink) |
| Registriert seit: 04.12.08 ![]() Likes: 0 | Hey coole Aufagabe die erinnert mich sehr an Stirb langsam 3 ![]() Ich habe das Problem in C++ gelöst und scheint zu funktionieren ![]() Programm bei der Auführung Programm bei der Ausführung |
| | |
| | #6 (permalink) |
| So nu hab ich mich mal rangesetzt und das problem per Batch gelöst. Ich hoffe dasses so nun richtig ist: Variante 2): Code: Durchgang 1 Eimer B befuellen: A = 0 Liter B = 33 Liter Eimer B in A umfuellen: A = 33 Liter B = 0 Liter Durchgang 2 Eimer B befuellen: A = 33 Liter B = 33 Liter Eimer B in A umfuellen: A = 16 Liter B = 0 Liter Durchgang 3 Eimer B befuellen: A = 16 Liter B = 33 Liter Eimer B in A umfuellen: A = 49 Liter B = 0 Liter Durchgang 4 Eimer B befuellen: A = 49 Liter B = 33 Liter Eimer B in A umfuellen: A = 32 Liter B = 0 Liter Durchgang 5 Eimer B befuellen: A = 32 Liter B = 33 Liter Eimer B in A umfuellen: A = 15 Liter B = 0 Liter Durchgang 6 Eimer B befuellen: A = 15 Liter B = 33 Liter Eimer B in A umfuellen: A = 48 Liter B = 0 Liter Durchgang 7 Eimer B befuellen: A = 48 Liter B = 33 Liter Eimer B in A umfuellen: A = 31 Liter B = 0 Liter Durchgang 8 Eimer B befuellen: A = 31 Liter B = 33 Liter Eimer B in A umfuellen: A = 14 Liter B = 0 Liter Durchgang 9 Eimer B befuellen: A = 14 Liter B = 33 Liter Eimer B in A umfuellen: A = 47 Liter B = 0 Liter Durchgang 10 Eimer B befuellen: A = 47 Liter B = 33 Liter Eimer B in A umfuellen: A = 30 Liter B = 0 Liter Durchgang 11 Eimer B befuellen: A = 30 Liter B = 33 Liter Eimer B in A umfuellen: A = 13 Liter B = 0 Liter Durchgang 12 Eimer B befuellen: A = 13 Liter B = 33 Liter Eimer B in A umfuellen: A = 46 Liter B = 0 Liter Durchgang 13 Eimer B befuellen: A = 46 Liter B = 33 Liter Eimer B in A umfuellen: A = 29 Liter B = 0 Liter Durchgang 14 Eimer B befuellen: A = 29 Liter B = 33 Liter Eimer B in A umfuellen: A = 12 Liter B = 0 Liter Durchgang 15 Eimer B befuellen: A = 12 Liter B = 33 Liter Eimer B in A umfuellen: A = 45 Liter B = 0 Liter Durchgang 16 Eimer B befuellen: A = 45 Liter B = 33 Liter Eimer B in A umfuellen: A = 28 Liter B = 0 Liter Durchgang 17 Eimer B befuellen: A = 28 Liter B = 33 Liter Eimer B in A umfuellen: A = 11 Liter B = 0 Liter Durchgang 18 Eimer B befuellen: A = 11 Liter B = 33 Liter Eimer B in A umfuellen: A = 44 Liter B = 0 Liter Durchgang 19 Eimer B befuellen: A = 44 Liter B = 33 Liter Eimer B in A umfuellen: A = 27 Liter B = 0 Liter Durchgang 20 Eimer B befuellen: A = 27 Liter B = 33 Liter Eimer B in A umfuellen: A = 10 Liter B = 0 Liter Fertig! In Eimer A befinden sich nun 10 Liter. Dabei wurden in 20 Durchgaengen, 650 Liter weggekippt. | |
| | |
| | #7 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | @Foxalem: ich glaub' Du hast einen Überlauf bzw fehlerhafte Berechnung Code: Durchgang 2 Eimer B befuellen: A = 33 Liter B = 33 Liter Eimer B in A umfuellen: A = 16 Liter B = 0 Liter Beim Durchgang 5 gilt dasselbe (weiter habe ich nicht geschaut).
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| | #8 (permalink) |
| Ehm... 33 + 33 = 66 66 - 50 = 16 Ich habe quasi in A schon 33Liter, kippe weitere 17 Liter von B in A. Kippe A aus und Kippe den Rest von B (16 Liter) in A. Hab das nur etwas übersprungen. Hab mich eben an der Lösung von xpecs orrientiert, welche genauso ist Mfg Edit: Bei der lösung von xpecs zähle ich 19 durchgänge. Funktioniert mit meinem Programm auch wenn man die Variablen ändert. Is wohl das gleiche Prinzip. | |
| | |
| | #9 (permalink) |
| Registriert seit: 04.12.08 ![]() Likes: 0 | Kann mir mal einer sagen, wieso ich bei 1.) ein Durchgang weniger habe als der Threadersteller? ![]() und in Variante 2 komme ich auch nur auf 19 Durchgänge nicht auf 20 ?( Antworten nach vorne |
| | |
| | #10 (permalink) | |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Zitat:
2)sie wird erst zum Schluss inkrementiert - und vorher kommen Breaks etc.. D.h angenommen man benötigt nur eine Aktion (Eimer auffüllen). Dann wird Dein Programm 0 Durchgänge ausgeben 3) Ihr beide zählt sowieso die Durchgänge komisch. Ein Durchgang/Schritt ist immer eine Aktion. Nicht 3-4 zusammengefasst Bps: Code: //never ending :P
for(j = 0; j < 4; j--){
EimerB.inhalt = EimerB.tank;
//Fülle B --> A
for(i = 0; i < EimerB.tank; i++)
{
EimerB.inhalt--;
EimerA.inhalt++;
//Eimer A voll, dann auskippen
if(EimerA.inhalt >= EimerA.tank){
EimerA.inhalt = 0;
}
//Eimer B leer? auffüllen
else if(EimerB.inhalt <= 0){
break;
}
}
durchgang++;
}
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. | |
| | |
| | #11 (permalink) |
| Mhh.. nu hab ichs wohl kapiert. Ne frage hätt ich allerdings noch. Ich hätte nun Ne möglichkeit mit der ich das evtl. schaffen könnte. Dafür müsstee ich den weg quasi einprogrammieren dasses auch dahinführt. Wäre dass falsch? Also muss man wirklich logic ins programm einfügen damit dass programm dass von alleine schafft durch soll-ist-wert vergleiche und dadurch den kleinsten weg findet? Mfg | |
| | |
| | #12 (permalink) |
| Registriert seit: 04.12.08 ![]() Likes: 0 | Danke @ CDW Du hast recht^^ Bin ich gar net drauf gekommen hehe ![]() und verdammt -.- du hast wieder recht. Naja, es war gestern spät :] und ich habe das mit dem zählen nicht so genau genommen |
| | |
| | #13 (permalink) | ||
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Zitat:
Das kannst Du machen. Ich hab allerdings jetzt noch eine Habofrage hinzugefügt, um "Handrechnungen" wirklich auszuschließen ![]() Zitat:
@xpecs: probiere mal mit Behälter A: 15l, B: 13l, Ziel: 20l ![]() ein solver in Prolog
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. | ||
| | |
| | #14 (permalink) | |
| Registriert seit: 04.12.08 ![]() Likes: 0 | @CDW Zitat:
Wie soll ich denn in einem 15l oder 13l Eimer 20 reinkriegen?^^Versteh jetzt die Aufgabe nicht sorry^^ | |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |