我正在尝试解决此作业:
假设人们进入一个空房间,直到一对人共同过生日。平均而言,一场比赛之前,有多少人必须进入?运行实验以估算此数量的价值。假设生日是0到364之间的统一随机整数。
平均值是24.61659。有关数学,请参见此维基百科页面。生日问题
我的方法:
码:
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for(int i = 0; i<10000; i++){
int count = 0;
Set<Integer> set = new HashSet<>();
while(set.add(ThreadLocalRandom.current().nextInt(0, 365))){
count++;
}
list.add(count);
}
double avg = list.stream().mapToInt(Integer::intValue).average().getAsDouble();
System.out.println(avg);
}
Run Code Online (Sandbox Code Playgroud)
我的输出始终低于24。例如23.6285
ThreadLocalRandom.current().nextInt(0, 365),nextInt(0,
364),nextInt(0, 366)list.add(count);和list.add(set.size());但是我总是平均低于24。主要是23.629237。
您是否看到任何错误以及为什么我没有得到正确的值(大约)。?24.61659?
ysh*_*vit 10
请注意,您的答案几乎比预期值少1。这是一个线索:它告诉您您可能低估了1,这是一个非常常见的错误。
考虑您的情况:
while(set.add(<newPersonsBirthday>)){
count++;
}
Run Code Online (Sandbox Code Playgroud)
那算不上最后一个人!它们不会被添加到计数中,因此您不会将它们包括在会议室中的所有人员中。您已经计算了集合中除触发比赛的人以外的所有人-但他们是集合中的一部分。
只需添加count + 1到您的列表中,即可说明该人。
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |