1. Einführung
Das Joseph -Problem (manchmal als Josephs -Permutation bezeichnet, ist ein Problem, das in Informatik und Mathematik auftritt. In Computer -Programmieralgorithmen werden ähnliche Probleme auch als Joseph -Ring bezeichnet. Auch als "Taschentuch werfen Problem" bezeichnet.)
Beispiel:
Len bildete persönlich einen Kreis und spielte das Spiel des Wurfen von Taschentüchern. Ausgehend von der KTH -Person wird die Person, die M zählt, aus dem 1. Zählen von 1. Wenn m gezählt wird, verlässt die Person, die M zählt, den Kreis, bis nur eine Person im Kreis übrig ist.
Problemanalyse und Algorithmus Design
Das Joseph -Problem ist nicht schwierig, aber es gibt viele Lösungen; Es gibt viele Variationen in der Frage. Hier ist eine Implementierungsmethode.
In der Frage sind Len -Individuen von einem Kreis umgeben, der uns dazu inspiriert, eine kreisförmige Kette zu verwenden, um sie darzustellen. Wir können ein strukturelles Array verwenden, um eine kreisförmige Kette zu bilden. Es gibt zwei Mitglieder in der Struktur, einer ist der Kopfknoten, der auf das erste Kind zeigt, und der andere ist der Knotentemperatur als Urteil (verantwortlich für das Spielen der unterstützenden Rolle).
Der spezifische Code lautet wie folgt:
Paket Demo11;/** * Josephs Problem, verwandelt Cycllink (); cyclink.setlen (15); cyclink.createlink (); cyclink.setk (2); cyclink.setm (2); cyclink.show (); cyclink.play ();}} // Erstellen Sie ein Kind. Child an idthis.no = no;}} Klasse Cycllink {// Definieren Sie einen Verweis auf das erste Kind in der verlinkten Liste. Erstes Kind // Der Verweis auf das erste Kind kann nicht bewegt werden. Child FirstChild = null; untergeordnetes temp = null; null; {this.m = m;} // Setzen Sie die Größe der verlinkten Liste public void setlen (int len) {this.len = len;} // Setzen Sie die Anzahl der Personen, um public void setk (int k) {this.k = k;} // Start Playpublic void () {Child temp = temp = this.firstChild; //. k; i ++) {temp = temp.NextChild;} while (this.len! Temp2.NextChild;} // 3. Beenden Sie das Kind, das zu m zählt, temp2.nextChild = temp.NextChild; // Temp auf das nächste Kind verweisen, das temp = temp.nextchild; // this.show (); this.len-;} // Das letzte untergeordnete System.out.println ("Letzte aus dem Kreis heraus"+temp.no);} // Initialisieren Sie die Ring-Link-Liste public void createlink () {für (int i = 1; i <= len; i ++) {if (i == 1) {// Erstellen Sie das erste Kind ch = neue Kinder (i). this.firstchild = ch; this.temp = ch;} else {if (i == len) {// Erstellen Sie das erste Child ch = neues Kind (i); temp.NextChild = ch; temp.nextChild = this.Firstchild;} else {// weiterhin das Kind Child ch = New Child (i); ch;}}}} // Drucken Sie die ringverbundene Liste public void show () {untergeordnetes temp = this.firstchild; do {System.out.print (temp.no + ""); temp = temp.nextChild;} while (temp! = this.firstchild);}}}}}Ergebnis:
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über die Beispielanalyse des Joseph -Problems in der Java -Programmierung, und ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!