Created
May 24, 2014 16:24
-
-
Save fabriciofx/617af6b10222fb3985a9 to your computer and use it in GitHub Desktop.
Simulador para o problema do Monty Hall
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package exemplos; | |
| import java.util.Random; | |
| public class MontyHall { | |
| // Dadas duas portas, escolhe aquela que restou. | |
| // Exemplos: | |
| // se forem dadas as portas 0 e 1, retorna 2 | |
| // se forem dadas as portas 0 e 2, retorna 1 | |
| // se forem dadas duas portas iguais (0 e 0, por ex.) retorna a primeira livre, | |
| // isto é, a 1 (tanto faz retornar a 1 ou a 2). | |
| public static int escolherPortaRestante(int porta1, int porta2) { | |
| boolean[] portas = { true, true, true }; | |
| portas[porta1] = false; | |
| portas[porta2] = false; | |
| for (int i = 0; i < portas.length; i++) { | |
| if (portas[i] == true) { | |
| return i; | |
| } | |
| } | |
| return 0; | |
| } | |
| public static void main(String[] args) { | |
| // Aqui é a quantidade de experimentos realizados. Troque este número para | |
| // realizar mais ou menos experimentos. | |
| int numeroDeExperimentos = 1000000; | |
| Random r = new Random(); | |
| int acertosSemTroca = 0; | |
| int errosSemTroca = 0; | |
| int acertosComTroca = 0; | |
| int errosComTroca = 0; | |
| for (int e = 0; e < numeroDeExperimentos; e++) { | |
| // Escolhe uma porta qualquer (entre 0, 1 e 2) para ser a porta premiada | |
| int portaPremiada = r.nextInt(3); | |
| // Escolhe uma porta qualquer (entre 0, 1 e 2) para ser a porta escolhida | |
| int portaEscolhida = r.nextInt(3); | |
| // Escolhe como porta a ser aberta, aquela que seja diferente da porta premiada | |
| // ou aquela diferente da porta escolhida | |
| int portaAberta = escolherPortaRestante(portaPremiada, | |
| portaEscolhida); | |
| // Escolhe como porta a ser trocada, aquela que seja diferente da porta escolhida | |
| // ou aquela diferente da porta aberta | |
| int portaTrocada = escolherPortaRestante(portaEscolhida, | |
| portaAberta); | |
| // Se eu não troquei de porta, a porta que eu escolhi era a premiada? | |
| if (portaEscolhida == portaPremiada) { | |
| acertosSemTroca++; | |
| } else { | |
| errosSemTroca++; | |
| } | |
| // Se eu troquei de porta, a porta que eu troquei era a premiada? | |
| if (portaTrocada == portaPremiada) { | |
| acertosComTroca++; | |
| } else { | |
| errosComTroca++; | |
| } | |
| } | |
| System.out.println("Acertos sem troca: " + acertosSemTroca | |
| / (double) numeroDeExperimentos); | |
| System.out.println(" Erros sem troca: " + errosSemTroca | |
| / (double) numeroDeExperimentos); | |
| System.out.println("Acertos com troca: " + acertosComTroca | |
| / (double) numeroDeExperimentos); | |
| System.out.println(" Erros com troca: " + errosComTroca | |
| / (double) numeroDeExperimentos); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment