Skip to content

Instantly share code, notes, and snippets.

@fabriciofx
Created May 24, 2014 16:24
Show Gist options
  • Select an option

  • Save fabriciofx/617af6b10222fb3985a9 to your computer and use it in GitHub Desktop.

Select an option

Save fabriciofx/617af6b10222fb3985a9 to your computer and use it in GitHub Desktop.
Simulador para o problema do Monty Hall
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