En un concurso, el concursante elige una entre tres puertas. El presentador le propone cambiarla por otra. Una de esas dos puertas (la elegida por concursante o la elegida por el presentador) tiene premio.
Este programa comprueba que las posibilidades de ganar, cambiando de puerta, son un 66% (en la puerta elegida por el presentador se acumulan las posibilidades de dos de las tres puertas).
Nota: la lógica detrás de este acertijo lógico es la siguiente:
Código para Qbasic / Quickbasic. Puede funcionar en VBA con ligeras modificaciones.
'DECLARE SUB trespuertas () 'Juego de las 3 puertas. 'Concursante elige 1 de 3 puertas. 'El presentador le propone cambiarla por otra, 'Una de las dos puertas (elegida por concursante o elegida por presentador) 'tiene premio. 'Este programa comprueba que las posibilidades de ganar, cambiando de puerta, 'son un 66% (en la puerta elegida por el presentador se acumulan 'las probabilidades de dos de las tres puertas). trespuertas SUB trespuertas vecespresentador = 0 vecesconcursante = 0 veces = 0 DO buena = INT(RND * 3) concursante = INT(RND * 3) IF concursante = buena THEN 'La puerta escogida es la buena 'Elegir otra al azar IF concursante = 0 THEN 'concursante: 0 => presentador: 1 o 2 presentador = INT(RND * 2) + 1 ELSE 'concursante: 1 => presentador: 0 o 2 'concursante: 2 => presentador: 0 o 1 presentador = (INT(RND * 2) * 2) / concursante END IF ELSE 'La puerta escogida NO es la buena. 'Elegir la puerta buena. presentador = buena END IF IF concursante = buena THEN vecesconcursante = vecesconcursante + 1 ELSE vecespresentador = vecespresentador + 1 END IF veces = veces + 1 PRINT USING "Veces: #,###,### concursante:#,###,### (###.##%) presentador:#,###,### (###.##%)"; veces; vecesconcursante; (100 * vecesconcursante) / veces; vecespresentador; (100 * vecespresentador) / veces LOOP END SUB