30人的班级,出现生日重复的概率有多大?
这里不用数学的方法去求解,而是借助计算机,通过随机数进行模拟,虽然得到的·
只是近似解,但是也很接近真实解。这就是蒙特卡罗算法的思想
代码如下:
public class Main{
//一个班30个人,求生日重复的概率
public static void main(String[] args) {
final int N = 1000 * 100;
int n = 0;
for(int i=0; i<N; i++) {
int[] x = new int[365];
for (int j=0; j<30; j++) {
int p = (int)(Math.random()*365);
if(x[p]==1) {
n++;
break;
}
else
x[p]=1;
}
}
double r = (double)n / N;
System.out.println(r);
}
}