Weiß jemand wie man dieses Programm schreibt?

  • Themenstarter Gelöschtes Mitglied 64282
  • Beginndatum
MoxxiManagarm

MoxxiManagarm

Top Contributor
Kannst du mir vielleicht erklären was du damit genau ausdrücken willst?:
Nehmen wir das Beispiel 28. Die Methode Wechselgeld bekommt 28 als Parameter übergeben, damit ist betrag = 28. Und auch rest wird damit 28.
Dann schaust du dir die verfügbaren Geldbeträge an und findest 10. Damit erhöhst du die anzahl um 1 und reduzierst den rest um diesen Betrag 10. Damit ist rest nur noch 18. Weil rest damit noch größer als 0 ist fängt die Schleife von vorne an. Du findest wieder 10, anzahl wird erhöht und dein Rest ist 8. Schleifenwiederholung Rest ist 3, dann 1, dann 0. Erst bei 0 wird die Schleife nicht mehr wiederholt und die Methode wird beendet mit der Anzahl.
 
G

Gelöschtes Mitglied 64282

Gast
Nehmen wir das Beispiel 28. Die Methode Wechselgeld bekommt 28 als Parameter übergeben, damit ist betrag = 28. Und auch rest wird damit 28.
Dann schaust du dir die verfügbaren Geldbeträge an und findest 10. Damit erhöhst du die anzahl um 1 und reduzierst den rest um diesen Betrag 10. Damit ist rest nur noch 18. Weil rest damit noch größer als 0 ist fängt die Schleife von vorne an. Du findest wieder 10, anzahl wird erhöht und dein Rest ist 8. Schleifenwiederholung Rest ist 3, dann 1, dann 0. Erst bei 0 wird die Schleife nicht mehr wiederholt und die Methode wird beendet mit der Anzahl.
Okay das habe ich verstanden, danke! Das muss jetzt nur noch übersetzt werden.. 😂 Ihr denkt auch ich bin doof.
 
G

Gelöschtes Mitglied 64282

Gast
Ich würde das als ersten Anfang durchaus durchgehen lassen. @mihe7 hat zwar aufgeteilt, aber er hat da evtl. etwas zu viel auf einmal genommen.

Also einfach einmal die Aufgabe wirklich Satz für Satz abhaken:

  1. Implementieren Sie in einer Klasse Kohle Münzgeldrückgaben. Dazu sind verschiedene verfügbare Münzwerte vorgegeben.
  2. 1. Implementieren Sie eine Methode Wechselgeld , die den auszugebenden Betrag als Parameter vom Typ int übergeben bekommt.
  3. Die zur Verfügung stehenden Münzwerte sind 1, 2, 5 und 10.
  4. Realisieren Sie die Münzrückgabe als Greedy-Algorithmus, sodass immer die größtmögliche Münze gewählt wird, die den noch auszugebenden Restbetrag nicht übersteigt.
  5. Zusätzlich soll die jeweils gewählte Münze auf der Konsole ausgegeben
  6. und am Ende soll die Gesamtzahl der ausgegebenen Münzen als Rückgabewert von der Methode zurückgegeben werden.
Wenn man das so aufteilt, dann kann man 1. und 2. erst einmal als abgehakt ansehen (So die schließenden Klammern auch da sind und das in einer Datei Kohle.java steht .. Es gibt also Randbedingungen, die wir nicht prüfen können. Aber Du solltest da etwas haben, das du übersetzen kannst (Entweder in einer Entwicklungsumgebung wird nichts angemeckert oder du rufst z.B. javac Kohle.java auf um es auf der Kommandozeile zu übersetzen.)

Da müsste man jetzt nur weiter machen. Die nächste Information ist erst einmal nicht so wirklich hilfreich in Sache Algorithmus. Aber zusammen mit 4. kannst Du evtl. beschreiben, wie Du vorgehen würdest, wenn Du es machen solltest: Du hast unbegrenzt 1, 2, 5 und 10 Cent Münzen und sollst mir 78 Cent geben. Wie gehst Du vor?
Vo
Das ist schon besser, aber da fehlt immer noch etwas....

So lange, wie der Restbetrag größer ist, als der Wert der Münze, nehme ich eine solche Münze und gebe es aus, erhöhe die Anzahl der benötigten Münzen um 1 und reduziere den Restbetrag um den Wert der Münze .

Worauf ich hinaus will ist: Du musst exakt werden. Im Code musst Du exakt sein. Da geht kein Wischi Waschi und nach meiner Erfahrung scheitert es genau an der Stelle. Du hast Dir das noch nicht exakt durchdacht und daher kann es nicht klappen!

Jetzt hast Du es deutlich formuliert und damit kann es 1:1 übersetzt werden:
a) Solange eine Bedingung erfüllt ist, mache ich etwas -> while (Bedingung) { Mache etwas }
b) Bedingung restbetrag > muenzenwert. -> Kann man also auch gut umsetzen
c) Ausgabe "Nehme Münze ...", anzahlMuenzen++ wäre eine Erhöhung der Anzahl der Münzen. Die Variable muss natürlich deklariert und initialisiert werden ... Restbetrag reduzieren: restbetrag = restwert - muenzwert;

Daher mein Ratschlag: Stell es Dir genau vor. Überleg genau, was Du machst. So ein Weg ist ok.

Du kannst aber auch gerne rechnen. Wenn es das ist, was Du machst, dann hast Du ein restwert / muenzwert als Anzahl der Münzen die du brauchst und restwert = restwert % muenzwert wäre der Rest.

Aber wie gesagt: Der Weg selbst ist mir egal. Nur stell es Dir exakt vor!

Und ein möglicher Zwischenschritt: Arbeite mit Stift und Zettel und du schreibst alles auf. Denn dann merkst Du, was Du alles brauchst / dir merken musst. Im Kopf merken gilt dabei nicht!

Das wird später einfacher werden, wenn Du das einfach "im Kopf machst". Aber wie gesagt: Wenn Du nicht durchdacht hast, was Du genau machen willst, dann wird das im Code scheitern. Das reale vorstellen ist halt in der Regel deutlich einfacher als es abstrakt im Code zu machen.
Voll gut erklärt danke
 
temi

temi

Top Contributor
Fangen wir mal an:
Du hast 78 Cent, die du in Münzen ausgeben willst.
Dir stehen 10, 5, 2 und 1 Cent Münzen zur Verfügung.
Du beginnst mit dem größten Münzwert: 10 Cent
78 Cent sollen es sein, 10 Cent ist weniger, also geht das.
Du gibst eine Münze aus, der Restbetrag ist 68 Cent.
10 Cent ist immer noch weniger als 68 Cent.
Du gibst eine weitere Münze aus, der Restbetrag ist 58 Cent.
...
10 Cent ist mehr als 8 Cent, du musst zum nächsten Münzwert übergehen.
5 Cent ist weniger als 8 Cent, das geht.
Du gibst eine Münze aus, der Restbetrag ist 3 Cent.
...
 
kneitzel

kneitzel

Top Contributor
Voll gut erklärt danke
Ich würde mich freuen, wenn ich Dir damit geholfen habe. Mir geht es halt auch darum, dir etwas den Weg zu ebnen für zukünftige Aufgaben. Auch bei der Fehlersuche kommen Stift und Zettel am Anfang ganz gut (nur da geht es dann anders herum - man hat Code und geht den dann manuell durch :) )

Bei meiner Erläuterung nur aufpassen - ich war nicht sorgfältig genug mit den Namen... wird z.B. hier deutlich: "restbetrag = restwert - muenzwert" - das muss natürlich restbetrag = restbetrag - muenzwert heißen.... also da aufpassen mit Variablen und deren Namen ... Diese Nachlässigkeit tut mir leid, aber ich hoffe, dass dies nicht zu sehr verwirrt.
 
G

Gelöschtes Mitglied 64282

Gast
Fangen wir mal an:
Du hast 78 Cent, die du in Münzen ausgeben willst.
Dir stehen 10, 5, 2 und 1 Cent Münzen zur Verfügung.
Du beginnst mit dem größten Münzwert: 10 Cent
78 Cent sollen es sein, 10 Cent ist weniger, also geht das.
Du gibst eine Münze aus, der Restbetrag ist 68 Cent.
10 Cent ist immer noch weniger als 68 Cent.
Du gibst eine weitere Münze aus, der Restbetrag ist 58 Cent.
...
10 Cent ist mehr als 8 Cent, du musst zum nächsten Münzwert übergehen.
5 Cent ist weniger als 8 Cent, das geht.
Du gibst eine Münze aus, der Restbetrag ist 3 Cent.
...
Das verstehe ich. Aber ich weiß nicht wie man das als Programm schreibt. Mir fehlen auch manche Begrifflichkeiten zu den Schleifen z.B.
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Ich möchte nochmal für dich klarstellen @LJO, dass es grundsätzlich 2 Vorgehen gibt.
1. Das methodische Vorgehen, welches ich beschrieben habe
2. Das mathematisch Vorgehen

Einzig und allein wegen dem Satz "Zusätzlich soll die jeweils gewählte Münze auf der Konsole ausgegeben" klingt es für mich so, als wäre das methodische Vorgehen das Ziel, wobei dir meisten hier (inkl. mir) eher das mathematische Vorgehen verwenden würden wenn dieser Satz nicht wäre. Bei dem mathematischen Vorgehen hättest du keine while-Schleife, sondern maximal eine for-Schleife, welche über die verfügbaren Münzgrößen iteriert.
 
kneitzel

kneitzel

Top Contributor
Fangen wir mal an:
Du hast 78 Cent, die du in Münzen ausgeben willst.
Dir stehen 10, 5, 2 und 1 Cent Münzen zur Verfügung.
Du beginnst mit dem größten Münzwert: 10 Cent
78 Cent sollen es sein, 10 Cent ist weniger, also geht das.
Du gibst eine Münze aus, der Restbetrag ist 68 Cent.
10 Cent ist immer noch weniger als 68 Cent.
Du gibst eine weitere Münze aus, der Restbetrag ist 58 Cent.
...
10 Cent ist mehr als 8 Cent, du musst zum nächsten Münzwert übergehen.
5 Cent ist weniger als 8 Cent, das geht.
Du gibst eine Münze aus, der Restbetrag ist 3 Cent.
...
Das ist übrigens der Ansatz, wie man immer manuell anfangen kann ...
Also erst wirklich die Schritte so aufschreiben. Also noch ganz ohne Schleife.
78 Cent -> 10 Cent geben, Rest 68 Cent
68 Cent -> 10 Cent geben, Rest 58 Cent
...
18 Cent -> 10 Cent geben, Rest 8 Cent

Und wenn man das hat, ist der zweite Schritt: Ich sehe, dass ich da ständig das gleiche mache - also versuche ich es, zusammen zu fassen.
Wieso habe ich bei 8 Cent aufgehört? -> 8 Cent ist kleiner als 10 Cent.
Was habe ich da immer gemacht? 10 Cent geben, Vorne steht Rest, hinten steht Rest - 10 Cent. Und das ist der neue Rest-Wert im nächsten Durchgang.
==> So entsteht die Schleife.

Das lässt sich 1:1 auch übertragen:
- Du machst es für 10 Cent
- Du machst es für 5 Cent
- Du machst es für 2 Cent
- Du machst es für 1 Cent
Das ist also auch eine Schleife. Du machst immer das Gleiche. Also für jeden Münzwert machst Du es einmal, wobei die Münzwerte sortiert sind.
Das wäre also wieder eine Schleife und die Münzwerte können - so wie Du es schon richtig hattest - in einem Array abgelegt sein. Die Schleife geht also das Array durch und macht da etwas ...

Das auch nur einfach als mögliche Vorgehensweise.

Viele dieser Vorgehen muss man paar Mal gemacht haben, denn diese kommen immer wieder. Das wird also von Mal zu Mal einfacher. Aber vielleicht hilft es, Dir das etwas bewusst zu machen. Später läuft sowas automatisch ab. Da braucht man es in diesem Detail nicht mehr aufschreiben. Aber das wiederholt sich auch durchaus auf anderen Ebenen. Dann spricht man halt über Pattern oder so (Aber das ist etwas, das Du jetzt erst einmal ignorieren kannst!)
 
kneitzel

kneitzel

Top Contributor
Das verstehe ich. Aber ich weiß nicht wie man das als Programm schreibt. Mir fehlen auch manche Begrifflichkeiten zu den Schleifen z.B.
Kannst Du denn einmal versuchen, das erarbeitete nur für die 10 Cent Münze als Code zu schreiben?
Du hast ja schon:
Java:
public class Kohle {
    public static int Wechselgeld (int decimal) {
        return 0;
    }
}

decimal ist also der Betrag in Cent. Und du willst:
Solange der (Rest)betrag > als 10 Cent ist, willst Du Ausgaben: "10 Cent Münze gegeben" und den (Rest)Betrag um 10 Cent reduzieren.
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Ich mach das ganze erst seit 2 Wochen sei bitte gnädig 😂
Das ist im übrigen sehr grenzwertig. Und ich hoffe du verstehst mich jetzt nicht falsch. Aber wir befinden uns hier in einem Forum. Wir versuchen Probleme zu lösen. Natürlich ist das Große Ganze dieser Aufgabe für dich ein Problem, das verstehe ich, aber es stellt sich heraus, dass dir massiv Grundlagen fehlen. Damit brauchst du eigentlich eher Nachhilfe. Dafür ist ein Forum eigentlich nicht geeignet und das, was wir hier gerade tun, entspricht einer Nachhilfe. Du merkst aber sicher, dass die Diskussion dadurch stark ausartet.
 
G

Gelöschtes Mitglied 64282

Gast
Das ist im übrigen sehr grenzwertig. Und ich hoffe du verstehst mich jetzt nicht falsch. Aber wir befinden uns hier in einem Forum. Wir versuchen Probleme zu lösen. Natürlich ist das Große Ganze dieser Aufgabe für dich ein Problem, das verstehe ich, aber es stellt sich heraus, dass dir massiv Grundlagen fehlen. Damit brauchst du eigentlich eher Nachhilfe. Dafür ist ein Forum eigentlich nicht geeignet und das, was wir hier gerade tun, entspricht einer Nachhilfe. Du merkst aber sicher, dass die Diskussion dadurch stark ausartet.
Mir muss doch auch niemand helfen der das nicht möchte. Ich tu mich eben sehr schwer damit und habe deshalb um Hilfe gebeten und freue mich auch darüber. Ich dachte ihr macht das eben schon länger und für euch ist das ein Klax.
 
kneitzel

kneitzel

Top Contributor
Mir muss doch auch niemand helfen der das nicht möchte. Ich tu mich eben sehr schwer damit und habe deshalb um Hilfe gebeten und freue mich auch darüber. Ich dachte ihr macht das eben schon länger und für euch ist das ein Klax.
Die Aufgabenstellung wäre für uns ein Klax. Nur es ist Dir ja nicht damit geholfen, dass wir das schnell lösen können. Du musst verstehen, wie das funktioniert.

Und die Frage ist, wie dieses Wissen vermittelt werden kann, das Dir fehlt. In einem Forum ist dies sehr schwer. Bei einer Nachhilfe könnte man viel besser auf Dich eingehen, Probleme identifizieren. Es würde ggf. eine Lösung vorgegeben aber du würdest direkt eine andere Aufgabe bekommen. Das wäre also ein ganz anderes Vorgehen, das möglich würde: Man kann direkt die Lösung einmal zeigen.
Das geht hier aber nicht:
a) Das müsste ausgearbeitet werden - da ja nicht nur die Lösung sondern auch der Lösungsweg wichtig ist incl. Erläuterungen ist das etwas, das nicht mal eben so geschrieben wird.
b) Deine Problematik ist für Dich die Aufgabe. Sobald Du eine Lösung hast, ist Deine Motivation da jetzt weiter zu machen, gering. Zumal von uns ja auch keine weitere Führung kommen dürfte ist es danach erst einmal vorbei und das hat Dir dann nicht geholfen. In wenigen Tagen bist Du da, wo Du jetzt auch bist. Nur eben hast Du eine andere Aufgabe, vermutlich mit gesteigerter Schwierigkeit und die wirst Du nicht bearbeiten können ...

Daher fürchte ich, dass das Forum da keine wirkliche Hilfe bieten kann - auch wenn ich es versucht habe (Wobei man meinen Ansatz mit geteilter Meinung sehen kann. Ich habe halt etwas überlegt, was Dir ggf. fehlt um solche Aufgaben generell lösen zu können.... Und da war ein Punkt eben dieses genaue Visualisieren, was da passieren soll / muss.)

Aber kriegst Du das hin, was ich hier geschrieben habe?
Kannst Du denn einmal versuchen, das erarbeitete nur für die 10 Cent Münze als Code zu schreiben?
Du hast ja schon:
Java:
public class Kohle {
    public static int Wechselgeld (int decimal) {
        return 0;
    }
}

decimal ist also der Betrag in Cent. Und du willst:
Solange der (Rest)betrag > als 10 Cent ist, willst Du Ausgaben: "10 Cent Münze gegeben" und den (Rest)Betrag um 10 Cent reduzieren.

Wir können da versuchen, jetzt Schritt für Schritt zum Ziel zu kommen ...
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Mir muss doch auch niemand helfen der das nicht möchte. Ich tu mich eben sehr schwer damit und habe deshalb um Hilfe gebeten und freue mich auch darüber.

Ich meinte ja du sollst mich nicht falsch verstehen ;-) Ich möchte dir helfen, und du siehst ich versuche das auch. Aber der Beitrag ist schon sehr lang ohne dass ich das Gefühl habe, dass wir wirklich voran kommen. Das liegt u.a. daran, dass ein Forum kein geeignetes Medium ist um so tiefgründig auf dich eingehen zu können wie du es, zumindest jetzt gerade, benötigst. Falls die Aufgabe aus einem Studium stammt, gibt es da nicht immer Tutorenprogramme, wo ältere Semester die jüngeren unterstützen?

Ich dachte ihr macht das eben schon länger und für euch ist das ein Klax.

Ja, wir machen das schon länger und ja das ist ein Klax. Aber nicht zuletzt die Ethik verbietet es uns Lösungen auf dem Silbertablett anzubieten. Hilfe zur Selbsthilfe ist der bessere Weg, aber dieser Weg ist in deinem Fall äußerst steinig :D
 
G

Gelöschtes Mitglied 64282

Gast
Ich meinte ja du sollst mich nicht falsch verstehen ;-) Ich möchte dir helfen, und du siehst ich versuche das auch. Aber der Beitrag ist schon sehr lang ohne dass ich das Gefühl habe, dass wir wirklich voran kommen. Das liegt u.a. daran, dass ein Forum kein geeignetes Medium ist um so tiefgründig auf dich eingehen zu können wie du es, zumindest jetzt gerade, benötigst. Falls die Aufgabe aus einem Studium stammt, gibt es da nicht immer Tutorenprogramme, wo ältere Semester die jüngeren unterstützen?



Ja, wir machen das schon länger und ja das ist ein Klax. Aber nicht zuletzt die Ethik verbietet es uns Lösungen auf dem Silbertablett anzubieten. Hilfe zur Selbsthilfe ist der bessere Weg, aber dieser Weg ist in deinem Fall äußerst steinig :D
Da hast du recht 😂 Ich bin aber auch leider jemand der super gerne mir Lösungen lernt. Ich kann so einfach besser denken und verstehen. Vielleicht finde ich jemanden der es mir macht weil so wird das hier heute denke ich nichts mehr. Danke trotzdem für eure Hilfe.
 
G

Gelöschtes Mitglied 64282

Gast
Die Aufgabenstellung wäre für uns ein Klax. Nur es ist Dir ja nicht damit geholfen, dass wir das schnell lösen können. Du musst verstehen, wie das funktioniert.

Und die Frage ist, wie dieses Wissen vermittelt werden kann, das Dir fehlt. In einem Forum ist dies sehr schwer. Bei einer Nachhilfe könnte man viel besser auf Dich eingehen, Probleme identifizieren. Es würde ggf. eine Lösung vorgegeben aber du würdest direkt eine andere Aufgabe bekommen. Das wäre also ein ganz anderes Vorgehen, das möglich würde: Man kann direkt die Lösung einmal zeigen.
Das geht hier aber nicht:
a) Das müsste ausgearbeitet werden - da ja nicht nur die Lösung sondern auch der Lösungsweg wichtig ist incl. Erläuterungen ist das etwas, das nicht mal eben so geschrieben wird.
b) Deine Problematik ist für Dich die Aufgabe. Sobald Du eine Lösung hast, ist Deine Motivation da jetzt weiter zu machen, gering. Zumal von uns ja auch keine weitere Führung kommen dürfte ist es danach erst einmal vorbei und das hat Dir dann nicht geholfen. In wenigen Tagen bist Du da, wo Du jetzt auch bist. Nur eben hast Du eine andere Aufgabe, vermutlich mit gesteigerter Schwierigkeit und die wirst Du nicht bearbeiten können ...

Daher fürchte ich, dass das Forum da keine wirkliche Hilfe bieten kann - auch wenn ich es versucht habe (Wobei man meinen Ansatz mit geteilter Meinung sehen kann. Ich habe halt etwas überlegt, was Dir ggf. fehlt um solche Aufgaben generell lösen zu können.... Und da war ein Punkt eben dieses genaue Visualisieren, was da passieren soll / muss.)

Aber kriegst Du das hin, was ich hier geschrieben habe?


Wir können da versuchen, jetzt Schritt für Schritt zum Ziel zu kommen ...
Ich weiß echt nicht wie ich anfangen soll..
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Und wenn es bei den Aufgaben 1 und 2 nicht so richtig klappen will, so kannst du auch immer noch Punkte mit den Aufgaben 3 und 4 absahnen. 3 würde dann halt nicht funktionale Methoden aufrufen, aber wäre umgesetzt. Für 4 brauchst du nicht mal einen Programmcode. Du musst wie gesagt nur verschiedene Beträge für die Münzen {1, 3, 6, 8} durchspielen (nach dem bisherigen Vorgehen) und schauen ob es offensichtlich eine andere Lösung mit weniger Münzen gibt. Mach dir dafür ruhig eine Tabelle, fang meinetwegen bei 1 an.

BetragMünzen nach dem bisherigen VorgehenLösung mit weniger Münzen?
11-
21 1-
33-
43 1-
53 1 1-
66-
76 1-
86 1 1-
98 1(nur gleich viele Münzen 6 3)

Tipp: Du muss nicht mehr viele Zahlen gehen bis du in dieser Tabelle einen solchen Fall finden würdest
 
mihe7

mihe7

Top Contributor
Ich weiß echt nicht wie ich anfangen soll..
Schritt für Schritt. Hier nochmal das Skelett mit Kommentar:
Java:
public class Kohle {

    /** Gibt die benötigten Münzen am Bildschirm aus,
      * um betrag mit Wechselgeld auszuzahlen und
      * gibt die Anzahl der benötigten Münzen zurück.
      *
      * @param  betrag  der auszuzahlende Betrag.
      * @return Anzahl für das Wechselgeld benötigte Münzen.
      */
    public static int Wechselgeld (int betrag) {
        return 0;
    }
}

Der Code liefert das korrekte Ergebnis, für den Fall, dass Kohle.Wechselgeld(0) aufgerufen wird, d. h. falls betrag == 0 gilt.

Aufgabe: passe den Code so an, dass er auch für Kohle.Wechselgeld(1) das korrekte Ergebnis liefert.
 
BestGoalkeeper

BestGoalkeeper

Top Contributor
Ganz so einfach ist es nicht auf den optimalen Algorithmus zu kommen...
Ich habe jetzt herausgefunden, dass du solange (Betrag >= 14) gilt den greedy Ansatz verfolgen kannst - und danach leider in die Innereien musst:
Java:
    public static int wechselgeld(int betrag, int threshold, boolean print) {
        if (print) {
            System.out.println(betrag);
        }
        List<Integer> t1 = new LinkedList<>();
        List<Integer> t2 = new LinkedList<>();
        while (betrag >= threshold) {
            betrag -= 8;
            t1.add(8);
            t2.add(8);
        }
        for (int i = betrag; i >= 0; i--) {
            t2.add(1);
        }
        int i = wechselgeld(betrag, t1, t2);
        if (print) {
            System.out.println(i);
            System.out.println(t2);
        }
        return i;
    }

    public static int wechselgeld(int betrag, List<Integer> temp, List<Integer> best) {
        int[] m = { 8, 6, 3, 1 };
        for (int i = 0; i < m.length; i++) {
            if (betrag - m[i] >= 0) {
                temp.add(m[i]);
                wechselgeld(betrag - m[i], temp, best);
                if (betrag - m[i] == 0 && temp.size() < best.size()) {
                    best.clear();
                    best.addAll(temp);
                }
                temp.remove(temp.size() - 1);
            }
        }
        return best.size();
    }

    public static void main(String[] args) {
        System.out.println(IntStream.rangeClosed(0, 100).map(i -> wechselgeld(i, 12, false)).sum());
        System.out.println(IntStream.rangeClosed(0, 100).map(i -> wechselgeld(i, 13, false)).sum());
        System.out.println(IntStream.rangeClosed(0, 100).map(i -> wechselgeld(i, 14, false)).sum()); // optimal threshold
        System.out.println(IntStream.rangeClosed(0, 100).map(i -> wechselgeld(i, 15, false)).sum());

        wechselgeld(13, 14, true);
    }
 
BestGoalkeeper

BestGoalkeeper

Top Contributor
BestGoalkeeper

BestGoalkeeper

Top Contributor
12 liegt ja unter dem Threshold von 14, es würde also richtig 6 6 berechnet werden vom Algorithmus...

@mihe7 Ich bezog mich auf den zweiten Aufgabenteil ;)
 
BestGoalkeeper

BestGoalkeeper

Top Contributor
Verstehe ich auch nicht. Bei 18 wäre doch 6+6+6 optimal und nicht 8+8+1+1.
Upps... Ja ihr vollkommen recht, 19 wäre der optimale Threshold: (bis 19 darf man noch -8 rechnen, darunter nicht mehr)
Java:
    public static int wechselgeld(int betrag, int threshold, boolean print) {
        if (print) {
            System.out.println(betrag);
        }
        List<Integer> t1 = new LinkedList<>();
        List<Integer> t2 = new LinkedList<>();
        while (betrag >= threshold) {
            betrag -= 8;
            t1.add(8);
            t2.add(8);
        }
        for (int i = betrag; i >= 0; i--) {
            t2.add(1);
        }
        int i = wechselgeld(betrag, t1, t2);
        if (print) {
            System.out.println(i);
            System.out.println(t2);
        }
        return i;
    }

    public static int wechselgeld(int betrag, List<Integer> temp, List<Integer> best) {
        int[] m = { 8, 6, 3, 1 };
        for (int i = 0; i < m.length; i++) {
            if (betrag - m[i] >= 0) {
                temp.add(m[i]);
                wechselgeld(betrag - m[i], temp, best);
                if (betrag - m[i] == 0 && temp.size() < best.size()) {
                    best.clear();
                    best.addAll(temp);
                }
                temp.remove(temp.size() - 1);
            }
        }
        return best.size();
    }

    public static void main(String[] args) {
        System.out.println(IntStream.rangeClosed(0, 100).map(i -> wechselgeld(i, 12, false)).sum());
        System.out.println(IntStream.rangeClosed(0, 100).map(i -> wechselgeld(i, 13, false)).sum());
        System.out.println(IntStream.rangeClosed(0, 100).map(i -> wechselgeld(i, 14, false)).sum()); // non-optimal threshold
        System.out.println(IntStream.rangeClosed(0, 100).map(i -> wechselgeld(i, 15, false)).sum());
        
        System.out.println(IntStream.rangeClosed(0, 100).map(i -> wechselgeld(i, 18, false)).sum());
        System.out.println(IntStream.rangeClosed(0, 100).map(i -> wechselgeld(i, 19, false)).sum()); // optimal threshold
        System.out.println(IntStream.rangeClosed(0, 100).map(i -> wechselgeld(i, 20, false)).sum());

        wechselgeld(18, 14, true);
        wechselgeld(18, 19, true);
    }
Hab gar nicht so weit gedacht...
 
G

Gelöschtes Mitglied 64282

Gast
Weiß wer wie man seinen Beitrag löschen kann? Würde das gerne machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R weiß jemand warum Java diesen Fehler ausspuckt? "Variable might not hav been initialized" Java Basics - Anfänger-Themen 4
B Fehler, aber ich weiß nicht warum Java Basics - Anfänger-Themen 3
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
A Fenster bleibt weiß Java Basics - Anfänger-Themen 7
B Signatur erstellen - Bild ist nur weiß Java Basics - Anfänger-Themen 0
M JavaFX: Fenster bleibt weiß Java Basics - Anfänger-Themen 3
N Ich weiß nicht, wie ich meinen Code richtig designen soll und komme nicht weiter Java Basics - Anfänger-Themen 4
N Erste Schritte HSV color space - schwarz und weiß nur anhand von Saturation oder Multiplikator ermitteln Java Basics - Anfänger-Themen 14
J GUI wird direkt nach dem erstellen weiß übermalt Java Basics - Anfänger-Themen 3
M Weiß nicht, wie ich es nennen soll. Java Basics - Anfänger-Themen 1
J Vererbung Kleiner Fehler, weiß aber nicht warum und wo Java Basics - Anfänger-Themen 9
M ArrayList - remove() löscht nicht! - weiß nicht wieso! Java Basics - Anfänger-Themen 8
H Variable ändert wert und ich weiß nicht warum Java Basics - Anfänger-Themen 3
O unexpected type - weiß nicht weiter! Java Basics - Anfänger-Themen 3
J Wert wird überschrieben, weiß nicht wieso Java Basics - Anfänger-Themen 2
I Weiß einfach nicht mehr weiter... Java Basics - Anfänger-Themen 3
X Ich weiß, wo der Fehler ist, kann ihn aber nicht beheben Java Basics - Anfänger-Themen 2
H contains (für LIST) funktioniert nicht - ich weiß nicht warum? Java Basics - Anfänger-Themen 7
B JList wird nach Ändern weiß Java Basics - Anfänger-Themen 11
P Paket einbinden: Mal Braun, mal weiß Java Basics - Anfänger-Themen 2
U Animation bleibt leer (weiß) Java Basics - Anfänger-Themen 5
N ich weiß nicht weiter. Java Basics - Anfänger-Themen 13
M java.lang.IndexOutOfBoundsException weiß nicht warum Java Basics - Anfänger-Themen 8
X Weiß nicht weiter! Java Basics - Anfänger-Themen 73
F Servlets, Formulare und ich weiß keine Lösung Java Basics - Anfänger-Themen 4
marcooooo Kann mir jemand das Beispiel kurz erklären so ungefähr:/ Java Basics - Anfänger-Themen 7
A Kann mir Jemand erklären wie ich das iteriere? Java Basics - Anfänger-Themen 4
G Fehlersuche-kann mir jemand helfen? Java Basics - Anfänger-Themen 46
T Kann jemand kurz das Programm testen? Java Basics - Anfänger-Themen 13
T Aufgabe Flussdiagramm, kann jemand checken? Java Basics - Anfänger-Themen 8
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
Y kann jemand die Terme mit Zahlen schreiben ?? Java Basics - Anfänger-Themen 4
R Kann mir hier jemand weiterhelfen? Java Basics - Anfänger-Themen 1
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
A Kann mir jemand dieses Programm erklären? Java Basics - Anfänger-Themen 1
B Kann mir jemand diese Bedingung erklären Java Basics - Anfänger-Themen 5
B Kann mir jemand erklären, warum hier dreimal was ausgegeben wird und nicht nur zweimal? Java Basics - Anfänger-Themen 16
B Könnte jemand über dieses jurze Javaprogramm schauen? Irgendwas funktioniert mit der z-Varible nicht Java Basics - Anfänger-Themen 2
E Input/Output Kann jemand meinen Code durchschauen? Java Basics - Anfänger-Themen 4
T Kann mir jemand sagen, was bei folgender for-Schleife passiert? Java Basics - Anfänger-Themen 1
F Versteht das jemand? -Java Java Basics - Anfänger-Themen 6
J TabelView - Kann mir jemand die Sequenz genau erklären ? Java Basics - Anfänger-Themen 2
K Könnte mir jemand erläutern, was der autor damit meint? Java Basics - Anfänger-Themen 5
J Kann mir bitte mal jemand diese Codes erklären? Java Basics - Anfänger-Themen 19
A Hat jemand einen ratschlag, wie java beim replaceALL eine geschweifte klammer erkennt ? Java Basics - Anfänger-Themen 5
H Java Hamster - kann mir jemand weiterhelfen? Java Basics - Anfänger-Themen 4
V kennt jemand empfehlenswerte online tutorials zur Hibernate ? gerne auch englisch. Java Basics - Anfänger-Themen 4
R Kann jemand diese Java Programmierung machen? Versteh ich leider nicht Java Basics - Anfänger-Themen 17
R kann mir jemand erklären was hier gemacht wurde? Java Basics - Anfänger-Themen 10
I kann mir jemand weiterhelfen, wo liegen die Fehler? Java Basics - Anfänger-Themen 3
E Kann mir jemand sagen was hier falsch ist? Java Basics - Anfänger-Themen 6
gonzoradio Hat jemand Erfahrung mit javavideokurs.de Java Basics - Anfänger-Themen 5
D Kann mir vielleicht jemand die reflexive Assoziation erklären? Java Basics - Anfänger-Themen 2
C Hat jemand Ahnung zum GCJ(Gnu Compiler for Java) Java Basics - Anfänger-Themen 7
S Kann mir jemand kurz die Vorteile des Iterators erklaeren..? Java Basics - Anfänger-Themen 8
M Kann mir bitte jemand "java.util.ArrayList" erklären? Java Basics - Anfänger-Themen 5
S Kennt jemand die Default-Cache Zeit beim Java-Plugin? Java Basics - Anfänger-Themen 2
B könnte nochmal jemand über mein Projekt schauen? Java Basics - Anfänger-Themen 4
S unschöne schleifen.jemand ne bessere idee Java Basics - Anfänger-Themen 4
K Kennt jemand ein gutes Tutorial für Wertübergabe? Java Basics - Anfänger-Themen 4
G Kann mir jemand das erklären? Java Basics - Anfänger-Themen 11
S Hat jemand eine Idee warum die JLabels nicht mehr farbig Java Basics - Anfänger-Themen 7
G Hoffe jemand kann mir ein paar Tips geben:binärer Suchbaum Java Basics - Anfänger-Themen 3
G Nutzt Jemand JCalendar? Java Basics - Anfänger-Themen 3
C Kann jemand mir helfen? Java Basics - Anfänger-Themen 15
N Kann mir bitte jemand helfen? Java Basics - Anfänger-Themen 6
M Kann mir jemand erklären, wie "static" funktionier Java Basics - Anfänger-Themen 2
ChrisPL4Y Wieso funktioniert dieses Programm nicht? Java Basics - Anfänger-Themen 6
TechGirl JAVA GUI Oberfläche Umkreisung - wie heißt dieses Element? Java Basics - Anfänger-Themen 2
W Methoden Methode auf Array aufrufen, und dieses Array dabei ändern? Java Basics - Anfänger-Themen 10
Tacofan Was macht dieses "Stückchen Code"? Java Basics - Anfänger-Themen 3
Shams Kann man von einem Interface aus auf die dieses implementierende Klasse zugreifen? Java Basics - Anfänger-Themen 4
M Warum ist dieses Feld der Klasse Math immutable? Java Basics - Anfänger-Themen 7
R Wieso funktioniert dieses Array nicht? Java Basics - Anfänger-Themen 13
M Wie heisst dieses Sortierverfahren? Java Basics - Anfänger-Themen 6
G Wo ist die Eigenschaft dieses JFrames versteckt? Java Basics - Anfänger-Themen 5
G Wie nennt man dieses Konstrukt Java Basics - Anfänger-Themen 3
V Schon wieder ein kleines problem...dieses mal mit do-while loop Java Basics - Anfänger-Themen 9
F Was soll dieses Programm genau machen ? Java Basics - Anfänger-Themen 9
P OOP Wie schreib ich dieses Programm am besten? Java Basics - Anfänger-Themen 6
D Was genau bedeutet und bewirkt dieses @override? Java Basics - Anfänger-Themen 15
P Datentypen Warum würde dieses Beispiel nicht funktionieren? Java Basics - Anfänger-Themen 6
G Aus eigenem Panel dieses Löschen Java Basics - Anfänger-Themen 2
S für was steht dieses e ?? Java Basics - Anfänger-Themen 4
J Was bedeutet dieses a [i].length? Java Basics - Anfänger-Themen 3
D Wie bringe ich dieses Programm als .jar zum laufen ? Java Basics - Anfänger-Themen 12
R Image aus jar laden (dieses mal awt) Java Basics - Anfänger-Themen 19
W "Sprechen Sie Java?" suche dieses Buch gebraucht! Java Basics - Anfänger-Themen 11
G Dieses verdammte Regex Java Basics - Anfänger-Themen 2
H warum ist dieses Kontext static? Java Basics - Anfänger-Themen 5
G Dieses leidige ID Thema Java Basics - Anfänger-Themen 9
D Was ist denn dieses Jar ueberhaupt ? Java Basics - Anfänger-Themen 3
G Wie nennt man dieses Konstrukt: Vector<Object> Java Basics - Anfänger-Themen 2
N Ist dieses Problem mit Java zu lösen? Java Basics - Anfänger-Themen 7
C Warum funktioniert dieses Speichern in Array nicht? Java Basics - Anfänger-Themen 4
S Ist dieses Projekt realisierbar? Java Basics - Anfänger-Themen 2
D Warum läuft dieses Programm so langsam? Java Basics - Anfänger-Themen 5
B Split und dieses Zeichen "" Java Basics - Anfänger-Themen 3
G Was macht dieses Program ? Java Basics - Anfänger-Themen 13
L Dieses Problem nagt an meiner Würde - Argument * Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben