Acabei de confeccionar um rascunho de programa em JAVA, representando o problema. Se o número de iterações tende ao infinito (testei com 50.000, mas é fácil provar a convergência), com a troca das portas a possibilidade de vitória tende a 2/3. Segue abaixo o fonte.
Abraços.
/*
* Mhallclass.java
*
* Created on 23 de Fevereiro de 2006, 23:01
*/
import java.util.Random;
/**
*
* @author Administrador
*/
public class Mhallclass
{
/** Creates a new instance of Mhallclass */
public Mhallclass()
{
painel = new javax.swing.JOptionPane();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
int trocar, sorte, escolha, novaescolha = 3, outraporta, vitorias = 0, derrotas = 0, iteracoes = 50000; // Variáveis usadas no corpo do código.
trocar = painel.showConfirmDialog(painel,"Deseja trocar de porta?","Pergunta!",2); // Define se a porta será trocada ou não.
Random aleatorizador = new Random(666); // Inicializa o gerador de números aleatórios.
// Repete o laço a fim de analisar uma amostra grande de iterações.
for( int i = 0; i < iteracoes; i++ )
{
sorte = aleatorizador.nextInt(3); // Define qual das portas está premiada.
escolha = aleatorizador.nextInt(3); // Define uma escolha.
// Apresentador abre uma das portas NÃO ESCOLHIDAS.
outraporta = escolha;
while ( (outraporta == escolha) || (outraporta == sorte))
{
outraporta = aleatorizador.nextInt(3);
}
// FIM.
// Quer trocar de porta??
if( trocar == 0 )
{
// EXECUTANDO TROCA.
for (int z = 0; z < 3; z++)
{
novaescolha = z;
if ( (novaescolha != escolha) && (novaescolha != outraporta) ) break;
}
// FIM.
if (novaescolha == sorte) // ganhou!
vitorias += 1;
else // perdeu
derrotas += 1;
}
// Não quer trocar de porta!!
else
{
if (escolha == sorte) // ganhou!
vitorias += 1;
else // perdeu
derrotas += 1;
}
//System.out.println(vitorias);
}
// Prestando contas do resultado:
painel.showMessageDialog(painel,"Porcentual de vitórias é " + ((double)vitorias/(double)iteracoes),"Resultado Final",0);
painel.showMessageDialog(painel,"Porcentual de derrotas é " + ((double)derrotas/(double)iteracoes),"Resultado Final",0);
System.exit(0);
}
private static javax.swing.JOptionPane painel;
}