Если предположить, что сумма в меньшем конверте равномерно распределена между 10 руб. и 100 руб., то про сумму в случайно вытянутом конверте очевидно следующее:
- Если выпало менее 20 руб., то в другом конверте определённо вдвое больше. Поэтому требуется брать другой конверт.
- Если выпало более 100 руб., то в другом конверте определённо вдвое меньшая сумма — ни в коем случае не брать другой конверт.
- Если выпало от 20 до 100 руб., в другом может быть как вдвое большая (с вероятностью 2/3), так и вдвое меньшая сумма (с вероятностью 1/3)
Код программы:
package simulator;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
public class TwoEnvelopes200100 {
public static void main(String[] args) {
Random rand = new Random(System.nanoTime());
List list = new LinkedList();
int max = 1000000;
int x1 = 0;
int x2 = 0;
int x3 = 0;
int y1 = 0;
int y2 = 0;
int y3 = 0;
for (int i = 0; i < max; i++) {
int x = rand.nextInt(90) + 10;
int y = x * 2;
list.add(x);
list.add(y);
int n = rand.nextInt(2);
int summa1 = list.remove(n);
int summa2 = list.remove(list.size() - 1);
if (summa1 < 20) {
x1++;
if (summa2 > summa1) {
y1++;
}
} else if (summa1 > 100) {
x2++;
if (summa2 > summa1) {
y2++;
}
} else {
x3++;
if (summa2 > summa1) {
y3++;
}
}
}
float z1 = ((float) y1) / ((float) x1) * 100;
float z2 = ((float) y2) / ((float) x2) * 100;
float z3 = ((float) y3) / ((float) x3) * 100;
System.out.println("Вероятность того, "
+ "что во втором конверте сумма больше, " +
"если в выбранном:");
System.out.println("Меньше 20: " + z1 + "%");
System.out.println("Больше 100: " + z2 + "%");
System.out.println("Между 20-100: " + z3 + "%");
}
}
Результат работы программы:
Вероятность того, что во втором конверте сумма больше, если в выбранном:
Меньше 20: 100.0%
Больше 100: 0.0%
Между 20-100: 66.07642%
|