1. Introducción
El problema de Joseph (a veces llamado Josephs Permutation, es un problema que aparece en la informática y las matemáticas. En los algoritmos de programación de computadoras, también se denominan problemas similares del anillo de Joseph. También conocido como el "problema de lanzamiento de pañuelos".
ejemplo:
Len formó personalmente un círculo y jugó el juego de lanzar pañuelos. Comenzando desde la persona de Kth, contando desde 1. Cuando se cuenta M, la persona que cuenta m saldrá del círculo, hasta que solo quede una persona en el círculo.
Análisis de problemas y diseño de algoritmo
El problema de Joseph no es difícil, pero hay muchas soluciones; Hay muchas variaciones en la pregunta. Aquí hay un método de implementación.
En la pregunta, los individuos de Len están rodeados por un círculo, lo que nos inspira a usar una cadena circular para representarla. Podemos usar una matriz estructural para formar una cadena circular. Hay dos miembros en la estructura, uno es el nodo principal que apunta al primer niño, y el otro es la temperatura del nodo como un juicio (responsable de desempeñar el papel de apoyo).
El código específico es el siguiente:
Paquete Demo11;/** * El problema de Joseph, convertido en un pañuelo * * @Author Tianq Idea: Crear una clase infantil, una clase de bucle Cyclllink */public class Demo11 {public static void main (string [] args) {cycllink = new = nuevo CyCllink (); cyclink.setlen (15); cyclink.createLink (); cyclink.setk (2); cyclink.setm (2); cyclink.show (); cyclink.play ();}} // Crea un niño de clase infantil {// La identidad del niño es int No; Child Nextchild; // Point a The Next Child (INT No) El niño un niño idthis.no = no;}} class cyCllink {// Definir una referencia al primer niño en la lista vinculada Primer niño // La referencia al primer niño no puede moverse child firstchild = null; child temp = null; int len = 0; // indica cuántos niños son int k = 0; // el niño int m = 0; // Count to the Number of Out /////// {this.m = m;} // Establezca el tamaño de la lista vinculada public void setLen (int len) {this.len = len;} // Establezca el número de personas para contar public void setk (int k) {this.k = k;} // inicio de playpublic void play () {niño temp = this.firstchild; // 1. hallazgo de la persona que comienza (se inicia (se inicia (inicia la persona; i ++) {temp = temp.nextchild;} while (this.len! = 1) {// 2. Cuente m para (int j = 1; j <m; j ++) {temp = temp.nextchild;} // Encuentra el niño anterior para salir del niño círculo Temp2 = temp; while (temp2.Next! = Temp) {Temp2 = temp2.nextchild;} // 3. Salga del niño que cuenta con m, salga temp2.nextchild = temp.nextchild; // deja que la temperatura apunte al siguiente niño que cuenta temp = temp.nextchild; // this.show (); this.len-;} // The Last Child System.out.println ("Last Out of the Circle"+Temp.No);} // Inicializa la lista de Link Link public void createLink () {for (int i = 1; i <= len; i ++) {if (i == 1) {// Cree el primer hijo Charn CH = nuevo hijo (i); this.firstChild = ch; this.temp = ch;} else {if (i == len) {// crea el primer niño niño ch = new Child (i); temp.nextchild = ch; temp.nextchild = this.firstchild;} else {// continúa creando el niño Ch = new Child (i); temp.nextchild ch;}}}} // Imprima la lista de anillo de anillo public void show () {child temp = this.firstchild; do {System.out.print (temp.no + ""); temp = temp.nextchild;} while (temp! = this.firstchild);}}resultado:
Resumir
Lo anterior es todo el contenido de este artículo sobre el análisis de ejemplo del problema de Joseph en la programación de Java, y espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!