Perfektes Mischen

Luka1501

Grünschnabel
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​

shuffleNumber(52)
ergibt 8.
 

Anhänge

  • perfektesmischen.txt
    736 Bytes · Aufrufe: 0

Technipion

Erfahrenes Mitglied
Hallo Luka1501,
wir sind nicht hier um deine Hausaufgaben zu machen, sondern um dir dabei zu helfen sie selbst zu erledigen.
Also: Die Aufgaben sind meiner Meinung nach ganz ordentlich gestellt. Was hast du denn bis jetzt zu Aufgabenteil 1? Hast du schon Code? Welche Gedanken hast du dir bis jetzt zur interleave-Funktion gemacht? Wo genau kommst du nicht weiter?

Gruß Technipion
 

Zvoni

Erfahrenes Mitglied
Fangen wir doch mal bei den Grundlagen an: Wie findest du heraus, ob es eine gerade oder ungerade Anzahl Karten ist? Gibts einen einfachen mathematischen Trick (und ich rede nicht von vordefinierten Funktionen welche dir Java vielleicht schon bietet):
 

Neue Beiträge