Hey Leute ich habe eine Aufgabe bekommen zum perfekten mischen aber da ich keinerlei Erfahrung habe im Programmieren wollte ich fragen ob mir jemand helfen kann mit dem code und einer erklärung zu folgenden Aufgaben:
Perfektes Mischen
Sogenanntes
perfektes Mischen (englisch
perfect shuffle) eines Kartenstapels mit einer
geraden Anzahl von Karten funktioniert wie folgt:
Der Kartenstapel wird in der Mitte geteilt, dann werden die beiden Hälften so ineinander gemischt, dass die Karten aus den beiden Hälften genau abwechselnd im gemischten Stapel vorkommen.
Beispiel
Der ursprüngliche Stapel enthalte
Zehn, Bube, Dame, König, As, Joker. Die zwei Hälften enthalten dann einerseits
Zehn, Bube, Dame und andererseits
König, As, Joker. Nach dem Zusammenfügen ergibt sich die gemischte Reihenfolge
Zehn, König, Bube, As, Dame, Joker.
Aufgabenteil 1
Der Einfachheit halber repräsentieren wir den Kartenstapel als Feld von natürlichen Zahlen.
Schreiben Sie zunächst eine Methode
▊ | public static int[] interleave(int[] a1, int[] a2)
|
die als Eingabe zwei als gleich lang vorausgesetzte Felder a1 und a2 akzeptiert (gleiche Länge muss
nicht geprüft werden). Die Methode gibt ein neues Feld zurück, in dem die Elemente aus a1 und a2 abwechselnd vorkommen, wobei mit dem ersten Element von a1 begonnen wird.
Beispiel
1
2
3
| int[] a1 = {1,2,3};
int[] a2 = {4,5,6};
int[] c = interleave(a,b);
|
c enthält die Elemente {1,4,2,5,3,6}
Aufgabenteil 2
Schreiben Sie eine weitere Methode
▊ | public static int[] perfectShuffle(int[] a)
|
die perfektes Mischen für Felder mit einer
geraden Anzahl von Elementen realisiert! Dazu muss zunächst das übergebene Feld in der Mitte geteilt und danach interleave aufgerufen werden. Falls das Feld eine
ungerade Anzahl an Karten enthält, wird nicht gemischt und das original Feld wird zurückgegeben.
Beispiel
1
2
| int[] a = {1,2,3,4};
perfectShuffle(a);
|
ergibt dann ein Feld mit den Elementen 1,3,2,4
Aufgabenteil 3
Wird ein Kartenspiel oft genug perfekt gemischt, nimmt er seine ursprüngliche Reihenfolge wieder an.
Schreiben Sie nun eine Methode
▊ | public static int shuffleNumber(int n)
|
die eine beliebige
gerade Zahl n>0 als Größe eines Kartenstapels akzeptiert. Die Methode gibt zurück, wie oft ein Kartenstapel dieser Größe höchstens perfekt gemischt werden muss, damit er seine ursprüngliche Reihenfolge wieder annimmt.
Es muss dabei mindestens einmal gemischt werden. Wenn n eine
ungerade Zahl ist, soll -1 als Wert zurückgegeben werden.
Beispiel
ergibt 8.