gpt4 book ai didi

java - for循环,运行1000次程序,在JAVA中得到蛇眼平均需要roll的次数

转载 作者:行者123 更新时间:2023-11-29 08:28:52 25 4
gpt4 key购买 nike

所以我早些时候发布了我的问题并认为我一切都很好,但我搞砸了并意识到我完全错误地理解了这个问题。我不需要计算蛇眼超过 1000 次骰子掷骰的平均值,而是计算获得蛇眼的掷骰数的平均值,超过 1000 次游戏。我对如何实现这一点有些迷茫。我试过这个:

public class RollDiceforloop {
public static void main(String[] args) {

int die1, die2, snakeye, rolls, game;
snakeye = 0;

die1 = 0;
die2 = 0;
rolls = 0;

for (game = 0; game < 1000; game++) {
die1 = (int)(Math.random()*6)+1;
die2 = (int)(Math.random()*6)+1;
if (die1 != 1 && die2 != 1); {
rolls +=1;
}
if (die1 == 1 && die2 == 1) {
snakeye +=1;
rolls +=1;
}
}
float average = snakeye / (float) rolls;

TextIO.putln(""+snakeye+" Snake Eyes over "+game+" games, with an average of "+average+" rolls required to get a Snake Eye.");
}
}

但我没有得到正确的结果。我对如何实现这一点有点迷茫。请帮忙?

最佳答案

一种简单计算获得蛇眼所花费的 throw 次数的方法如下:

int count = 0;
for (int i = 0; i < 1000; ++i)
{
int result = 0;
while (result != 2)
{
result = (int) (Math.random() * 6) + (int) (Math.random() * 6) + 2;
++count;
}
}
System.out.println(count / 1000.d);

运行应该让你得到大约 36 轮的结果,这基本上是预期值,因为你每次 throw 都有 1/36 的机会获得蛇眼,所以从长远来看,从长远来看,你将每 36 次获得一个 throw 。

但是,这是有点歪曲的数学。这是否告诉您在没有 Snakeeyes 的情况下 throw 37 次后您的骰子不平衡?或者,如果你在 2 卷后得到 Snakeeyes,你就会以某种方式作弊?不,显然不是。

这就是数学进入等式的地方。首先让我说一下,没有办法计算出获得蛇眼所需的确切 throw 次数。我们可以做的是根据置信度计算概率。这里的信心基本上是在说:

I want a chance of x% to get a snakeeyes.

x 是置信度。您可以自信地使用简单的公式

1 - (35/36) ^ n > x 并为 n 解决这个问题,以获得在给定置信度下会给你一个或多个的 throw 次数蛇眼。请注意,35/36 是不会得到蛇眼但会得到其他任何东西的机会。

那么假设我们真的很想要蛇眼。我们的置信度为 99.9%。通过公式,我们可以得到 n = 246。所以我们需要 246 次 throw 才能得到至少一只蛇眼的 99.9% 的机会。

我们再赌一把怎么样?我们说我们很好,只有 50% 的机会得到蛇眼。因此我们得到 n = 25

这实际上低于我们的计算值。

那我想说什么呢?显然,您可以进行足够多次尝试的实验,最后您总能得到预期的 throw 值(这实际上称为“大数法则”)。然而,这对于确定获得蛇眼实际需要 throw 多少次没有任何值(value)。它只是计算期望值。这是真的不需要实验的东西。

所以方法

返回 36;

实际上在这里就足够了。

关于java - for循环,运行1000次程序,在JAVA中得到蛇眼平均需要roll的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49996353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com