josephu en java. Quien tenga el código obtendrá puntos extra.
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;