[蓝桥杯](超详细)30人的班级,出现生日重复的概率有多大(java实现)
import java.util.Random;
public class birthday {
public static void main(String[] args) {
final int N=100000;
int n=0;
for(int i=0;i<N;i++) {//重复模拟N遍
int[]a=new int[365];//数组放在内层循环外,模拟一次,创建一次新的a数组
for(int j=1;j<=30;j++) {
int s=(int)(Math.random()*365);//模拟30个人随机的生日日期为365天中的某一天
if(a[s]==1) {//在一次模拟中,将出现过的日期用a数组记录,之前未出现过就在此日期的存储位置+1,若此前已经出现过则n+1记录后跳出循环,表明此次模拟的结果为,出现了相同生日的情况。
n++;
break;}
else
a[s]=1;
}
}
double r=(double)n/N;//经过N此模拟后,用n/N,并将先将n转换为double类型。注意不可(double)(n/N),因为此结果先计算n/N,此结果是小数,并返回int类型,类型转换后会得到0.0的结果。
System.out.println(r);
}
}