Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
playground:playground [31.07.2011 05:23] Sascha |
playground:playground [28.02.2017 22:51] (aktuell) Affalf [Aufgabe 2c] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== PlayGround ====== | + | {{:vorkurs:bahnticketautomatloesung.java|lösung}} |
+ | {{:vorkurs:bahnticketautomatloesung.zip|zip}} | ||
- | <bewertung WS 2011 - Tag 1> | + | ===== Aufgabe 2c ===== |
- | Tan1 | + | |
- | Tan2 | + | |
- | Tan3 | + | |
- | # | + | |
- | | Frage 1 | | + | |
- | | Frage 2 | | + | |
- | [ Text 1 ] | + | |
- | </bewertung> | + | |
+ | <php> | ||
+ | |||
+ | echo '<input type="checkbox" id="2cGeruhnCheck" onchange="if(this.checked) document.getElementById(\'2cGeruhn\').style.display = \'block\'; else document.getElementById(\'2cGeruhn\').style.display = \'none\';"> <label for="2cGeruhnCheck">2c von Geruhn</label>'; | ||
+ | |||
+ | echo '<br />'; | ||
+ | |||
+ | echo '<input type="checkbox" id="2cCrazyFischCheck" onchange="if(this.checked) document.getElementById(\'2cCrazyFisch\').style.display = \'block\'; else document.getElementById(\'2cCrazyFisch\').style.display = \'none\';"> <label for="2cCrazyFischCheck">2c von CrazyFisch</label>'; | ||
+ | |||
+ | echo '<div id="2cGeruhn" style="display:none">'; | ||
+ | |||
+ | </php> | ||
+ | |||
+ | <code java> | ||
+ | public boolean habenSelbeDezimalziffern(int a, int b) { | ||
+ | int[][] ziffern = new int[2][9]; //Anlegen eines Arrays mit neun Plätzen pro Zahl, auf den neun Plätzen wird dann die Anzahl jeder Ziffer abgespeichert | ||
+ | //Beispiel 88137 entspricht {1,0,1,0,0,0,1,2,0} | ||
+ | int[] ab = {a, b}; //Speichern der beiden Zahlen in einem Array, um eine Schleifen-Lösung zu ermöglichen | ||
+ | |||
+ | for(int i = 0; i < ab.length; i++) { | ||
+ | while(ab[i] > 0) { //Überprüfung, ob die zu überprüfende Zahl schon komplett zerteilt wurde | ||
+ | ziffern[i][(ab[i] % 10) - 1] += 1; // "ab[i] % 10" ergibt die letzte Ziffer einer Integer-Zahl, die auf ab[i] abgespeichert ist (*) | ||
+ | //Da die Anzahl der Ziffer 1 auf dem Index 0 abgespeichert wird, addieren wir 1 zu der vorhandenen Anzahl (deswegen +=) | ||
+ | //auf dem Index ((ab[i] % 10) - 1) hinzu | ||
+ | ab[i] = ab[i] / 10; //Jetzt teilen wir die Zahl durch 10 (beachte Regeln der Integer-Division) und speichern sie ab, damit löschen wir die soeben | ||
+ | //gefundene Ziffer und können nach der nächsten Ziffer prüfen | ||
+ | } | ||
+ | } | ||
+ | //Jetzt haben wir alle Ziffern, beider Zahlen a und b gefunden und die entsprechende Anzahl abgespeichert und können nun vergleichen | ||
+ | for(int i = 0; i < ziffern[0].length; i++) { | ||
+ | if(ziffern[0][i] != ziffern[1][i]) { //Wenn die Anzahl der (i+1)ten Ziffer ungleich ist, dann wissen wir, dass die beiden Zahlen nicht die selben Ziffern haben und wir | ||
+ | return false; //können frühzeitig abbrechen, ansonsten gehen wir weiter, bis alle Ziffern geprüft sind | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return true; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | (*) % wird Modulo ausgesprochen, das Ergebnis von 10 % 3 ist 1, da 10/3 = 3 Rest: 1 ist | ||
+ | |||
+ | <php> | ||
+ | |||
+ | echo '</div>'; | ||
+ | |||
+ | </php> | ||
+ | |||
+ | <php> | ||
+ | |||
+ | echo '<div id="2cCrazyFisch" style="display:none">'; | ||
+ | |||
+ | </php> | ||
+ | |||
+ | ursprüngliche Lösung von CrazyFisch (korrigiert/kommentiert): | ||
+ | |||
+ | <code java> | ||
+ | |||
+ | |||
+ | public boolean habenSelbeDezimalZahlen(int a , int b) { | ||
+ | int usedA = a; //Unnötiges Zwischenspeichern | ||
+ | int usedB = b; | ||
+ | |||
+ | int size = 0; | ||
+ | int sizeb = 0; | ||
+ | |||
+ | int x; | ||
+ | |||
+ | int ok = 0; | ||
+ | int bigsize = 0; | ||
+ | |||
+ | //Länge herrausfinden | ||
+ | while((a % 10) > 0) { | ||
+ | // x = a % 10; //sieht unnötig aus, da das Ergebnis nicht verwendet wird. | ||
+ | size ++; | ||
+ | a = a / 10; | ||
+ | } | ||
+ | while((b % 10) > 0) { | ||
+ | // x = b % 10; //sieht unnötig aus, da das Ergebnis nicht verwendet wird. | ||
+ | sizeb ++; | ||
+ | b = b / 10; | ||
+ | } | ||
+ | |||
+ | int dec [] = new int[size]; | ||
+ | int decb [] = new int[sizeb]; | ||
+ | |||
+ | //Ziffern in richtiger Reihenfolge in Array abspeichern | ||
+ | while((usedA % 10) > 0) { //hier wäre ein richtige for-Schleife übrigens besser gewesen, da die Länge schon bekannt ist | ||
+ | x = usedA % 10; | ||
+ | dec[size-1] = x; | ||
+ | usedA = usedA / 10; | ||
+ | size--; | ||
+ | } | ||
+ | |||
+ | while((usedB % 10) > 0) { //siehe Kommentar oben (dies ist übrigens ein Hinweis, dass Code kopiert wurde, also durch eine Hilfsmethode | ||
+ | x = usedB % 10; //oder eine Schleife besser zu lösen gewesen wäre) | ||
+ | decb[sizeb-1] = x; | ||
+ | usedB = usedB / 10; | ||
+ | sizeb--; | ||
+ | } | ||
+ | |||
+ | //eigentliche Prüfung der Ziffern | ||
+ | for(int i=0; i < dec.length; i++) { | ||
+ | for(int j=0; j < decb.length; j++) { | ||
+ | if(dec[i] == decb[j]) { | ||
+ | ok++; | ||
+ | dec[i] = 0; //muss gemacht werden, damit die Ziffer nicht nochmal gefunden wird. | ||
+ | dec[j] = 0; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Anzahl der richtigen Ziffern feststellen | ||
+ | if(dec.length > decb.length) { //Diese Verkettung der if-else Bedingung ist ungeschickt, da direkt >= verwendet hätte werden sollen, | ||
+ | bigsize = dec.length; //anstatt > somit fällt ein if-Vergleich weg | ||
+ | } //Des Weiteren fällt auf, dass wenn die Längen schon unterschiedlich sind, das Ergebnis gar nicht richtig sein kann | ||
+ | if(dec.length < decb.length) { | ||
+ | bigsize = decb.length; | ||
+ | } else { | ||
+ | bigsize = dec.length; | ||
+ | } | ||
+ | |||
+ | if(bigsize == ok) { //bigsize == ok ist ein boolscher Term, beim Lösen kommt entweder "true" oder "false" heraus | ||
+ | return true; //also wäre ein "return (bigsize == ok)" besser | ||
+ | } else { | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | <php> | ||
+ | |||
+ | echo '</div>'; | ||
+ | |||
+ | </php> |