Pregunta de inteligencia: el destino de 100 criminales

Jaja, una pregunta de entrevista muy interesante. ¡Escuché que era una pregunta de una entrevista en Baidu no hace mucho este año! Dado que el interruptor tiene dos estados, supongo que es una cuestión de programación. Intenté programar para simularlo y debería estar bien.

Avance: interruptor (pero está obsoleto, lo que significa que no se puede utilizar como luz de control. Este es el ingenio y la integridad de la pregunta. De hecho, es una pregunta de una gran empresa), que puede encender o apagar Dado que las 100 celdas están completamente aisladas y no pueden comunicarse entre sí, incluso si se pueden usar las luces de la calle, las personas en las celdas no pueden ver el exterior. De esta manera, las luces se pueden encender o apagar directamente. Encendiendo o apagando el interruptor significa, según lo que dije arriba, sería genial desecharlo, ¡y también puede ahorrar energía!

Una breve descripción de parte del código que utiliza el lenguaje de programación VC es la siguiente:

BOOL Buf=FALSE; //Dos estados del interruptor de bandera, 1 es abierto, 0 es cerrado

int Science; /*0--99 valor, 100 matemáticos están numerados del 0 al 99, Science=N significa que el enésimo matemático sale a divertirse en un día determinado, dejemos que Science=0 sirva como puesto de centinela El matemático es responsable de mantener el interruptor en el estado encendido (el estado apagado también es aceptable, aquí tomamos el estado encendido como ejemplo)*/

int ScienceBuf[100]; /ScienceBuf[N]=0 significa que el enésimo bit científico no ha apagado el interruptor

//ScienceBuf[N]=1 significa que el enésimo bit científico no ha apagado el interruptor

//Entonces ScienceBuf[N] solo puede ser 0 o 1 Valor

int Science_Num=1; /*Registrado por Sentinel Mathematics y registra el número de personas que con toda seguridad han salido fun*/

int Num; //Registra el número de días (función auxiliar)

for(int i=0; ilt; 100; i)

ScienceBuf[i]=0; //Inicialización, porque el interruptor no estaba apagado al principio

for(Num=0;;Num)

{ Science=rand100; /*A medida que aumenta el número de días, rand100 se generará aleatoriamente en matemáticas todos los días*/

if(Science==0 amp; amp; Buf==FALSE) //El puesto de centinela salió por un paseo y vi a alguien apagando el interruptor por primera vez

{ Science_Num; /* Si alguien apaga el interruptor por primera vez, se registrará y contará como su primera liberación*/

Buf=TRUE; //Y continúa manteniendo el interruptor encendido

}

if( Science!=0 amp; amp; Buf==TRUE amp; amp ; ScienceBuf[Science]==0) //Otras personas se están ventilando y el interruptor está encendido y esta persona no ha apagado el interruptor

{ Buf=FALSE; //Apaga el interruptor

ScienceBuf[Science]=1; //Esta persona ha apagado el interruptor

}

if( Science_Num==100)

{ coutlt;lt;"Todos han salido, puedo informar, podemos irnos a casa"lt;lt;endl;

return;

}

}

(Cuando puedan apagarse todos depende de la complejidad temporal de este algoritmo.

En la práctica, el tiempo generado aleatoriamente es inconmensurable, pero es concebible que la probabilidad de que cada persona salga todos los días sea del 1%, por lo que el valor esperado de que alguien salga es una vez cada 100 días, lo que significa que todos los matemáticos pueden hacerlo. en 100*100 días sería ideal para salir. ¡Parece que habrá que pasar 27 años en él! )

Para aquellos que no entienden de programación, lea la siguiente descripción de texto:

Supongamos que la primera persona que libera el viento es Q, y Q es un centinela, y él Sólo puede mantener el interruptor abierto. Es decir, cuando le llegue el momento de soltar el aire, si ve que el interruptor está encendido, lo seguirá dejando encendido. Si ve que el interruptor está apagado, lo encenderá y lo registrará. una vez;

Las demás personas que salgan serán tratadas de la misma manera. Si estas personas salen y ven que el interruptor está encendido, y no lo han apagado ellos mismos, apáguelo, si ve que el interruptor está encendido, déjelo así y manténgalo en su estado original;

De esta forma, la persona que apaga el interruptor está apagando el interruptor por primera vez, y se considera que es la primera vez que sale a divertirse. En ese momento, otras personas que estaban saliendo por primera vez vieron a alguien que estaba saliendo por primera vez frente a ellos y apagaron el interruptor. Incluso si no salían para salir, no moverían el interruptor. cambiar. Exactamente así, lo que Sentry Q registra son todas las personas que salen por primera vez. Excepto ellos mismos, si graban 99 veces cuando el interruptor está encendido o apagado, ¡todos habrán sido liberados al menos una vez!

Entre las personas de arriba, solo la del tercer piso se acerca a lo que dijo (tal vez tenga la idea correcta pero no lo explicó claramente. Los demás tampoco respondieron directamente). o no entendieron la pregunta claramente y no la pensaron detenidamente.