Red de conocimiento informático - Aprendizaje de programación - josephu en java. Quien tenga el código obtendrá puntos extra.

josephu en java. Quien tenga el código obtendrá puntos extra.

paquete com.apache.owen.link.josephus;

importar java.util.ArrayList;

importar java.util.List;

importar junit.framework .TestCase;

/**

* Anillo de José

* Se sabe que hay n personas (usando los números 1, 2, 3.. . n significa) sentado alrededor de una mesa redonda. A partir de la persona con el número k, la persona que cuenta hasta m queda afuera; la siguiente persona comienza desde 1, y la persona que cuenta hasta m queda afuera;

*

* @author chenchen

*/

clase pública Josephus extiende TestCase {

public void prueba() {

findMonkey(50000, 3);

miJosephus(50000, 3, 1); **

* Utilice métodos matemáticos puros para resolver el problema, el algoritmo original no proporciona parámetros de inicio

* longitud=30000000, la operación tarda más de 1 segundo

* longitud =200000, la operación tarda más de 1 segundo. Cuando longitud = 200000, el tiempo de operación excede 1 ms

* el paso tiene poco impacto en el tiempo de operación

* O(1)

* @param inicialización de longitud Longitud de la cola

* @param step m

* @param start k

* @return

*/

protected void findMonkey(int length, int step) {

int start =

long startTime = System.currentTimeMillis(); int i = 2; i lt; = longitud; i ){

inicio = (paso inicial) i;

}

long stopTime = Sistema: " ( stopTime - startTime) "ms");

System.out.println(inicio 1);<

}

/**

* Método de bricolaje: Java resuelve el problema simulando la situación real

* Cuanto menor sea el tamaño del paso, mayor será el tiempo

* Longitud = 40000, el tiempo excederá 1s

* Longitud = 5000, el tiempo excederá 1 ms

* Longitud = 5000, el tiempo excederá 1 ms

Esta es la primera vez que Java lo hace este.

Se necesitan más de 1 ms

* O(nm)

* @param length

* @param step

* @param start

*/

protected void myJosephus(int longitud, int paso, int inicio) {

protected void miJosephus(int longitud, int paso, int inicio) {

protected void myJosephus(int length, int step, int start) int step, int start) {

// Cola para almacenar personas

Listlt; Stringgt ; lista = new ArrayListlt; Stringgt ();

for (int i = 1; i lt; = longitud; i) {<

lista.add(((Entero ) i).toString());

}

// Comience a contar el número de filas en la cola, inicialice current=start-1, current es el subíndice

int actual = inicio - 1;