-
Notifications
You must be signed in to change notification settings - Fork 0
/
MontyHall.java
65 lines (62 loc) · 1.89 KB
/
MontyHall.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//2011.11.3
//a small test for verifying the monty hall problem
//
class MontyHall {
public static int REPEAT=1000;
private static int pick(int range) {
return (int)(Math.random()*range);
} private static boolean isInArray(int target, int[] arr) {
for(int i=0; i<arr.length; i++) {
if(target==arr[i]) return true;
}
return false;
}
private static int pickExcept(int range, int ... exceptions) {
int pseudoIndex=pick(range-exceptions.length);
int index=0;
while(isInArray(index, exceptions)) {
index++;
}
for(int i=0; i<pseudoIndex; i++) {
//[ if index is an exception, increase index
while(isInArray(index, exceptions)) {
index++;
//System.err.println("index++"+index);
}
index++;
}
return index;
}
private static void testStubborn(int numOfDoors) {
int winCount=0;
int rep=0;
for(; rep<REPEAT; rep++) {
int prize=pick(numOfDoors);
int firstGuess=pick(numOfDoors);
if(prize==firstGuess) winCount++;
}
System.out.println((double)winCount/rep);
}
private static void testSmart(int numOfDoors) {
int winCount=0;
int rep=0;
for(; rep<REPEAT; rep++) {
int prize=pick(numOfDoors);
int firstGuess=pick(numOfDoors);
int revelation=pickExcept(numOfDoors, prize, firstGuess);
int secondGuess=pickExcept(numOfDoors, firstGuess, revelation);
/*
System.out.printf(
"prize: %d, firstGuess: %d, revelation: %d, secondGuess: %d%n",
prize, firstGuess, revelation, secondGuess);
*/
if(prize==secondGuess) winCount++;
}
System.out.println((double)winCount/rep);
}
public static void main(String[] args) {
//testStubborn(3);
testSmart(3);
//pickExcept(3, 2);
}
}