gpt4 book ai didi

C# 掷骰子概率

转载 作者:行者123 更新时间:2023-11-30 15:55:39 24 4
gpt4 key购买 nike

我想证明掷骰子掷出 6 的概率是 1/6,连续两次掷出 6 的概率是 1/36。我编写的程序试图模仿该过程。

为了更好地解释我的代码。 “尝试”是掷骰子的次数。 “diceRoll”是我用来模拟掷骰子的变量。 “successiveAttempts”是测量 6 是否连续滚动的变量,如果不是,则重置 while 循环。我有一个重复 10000 次的 while 循环的原因是为了多次重复掷骰子测试并获得结果的平均值。因为有时 6 会在 3 次尝试或 80 次尝试中连续滚动两次,所以我想通过重复该过程 10000 次来获得结果的平均值。

“百分比”是尝试次数除以重复测试的次数,以获得每次掷骰子的平均尝试次数。当我将 while 循环内的数字更改为数字 1 时,它在我的程序中返回正确的数字 6。平均需要 6 次尝试才能掷出 6。但是当我将数字更改为 2 次连续尝试时。我返回 42,这是不真实的。连续两次掷出 6 平均需要尝试 36 次。

当 while 循环内的数字是 1 对 2 时,我不明白为什么程序能正常运行。谁能解释我哪里出错了?如果我的代码令人困惑,我很抱歉,我是初学者,我很困惑。如果有人可以帮助我,我会很乐意帮助。

public static void Main(string[] args)
{
Random numGen = new Random();
int diceRoll = 0;
int attempts = 0;
int successiveAttempts = 0;
int x = 0;

while (x < 10000)
{
successiveAttempts = 0;
while (successiveAttempts < 2)
{
diceRoll = numGen.Next(1,7);
if (diceRoll == 6)
{
successiveAttempts++;
}
else
{
successiveAttempts = 0;
}
attempts++;
}
x++;
}
int percentage = attempts/x;

Console.WriteLine(percentage);
Console.WriteLine(attempts);
Console.ReadKey();
}

最佳答案

我不认为你在衡量你认为你在衡量的东西。您不是在测试单独的试验来查看“ throw N 六的机会是多少?”。对于那个你会做这样的事情:

public static void Main()
{
Random numGen = new Random();
int succeses = 0;

const int TRIES = 10000;
for(int i = 0; i < TRIES;i++)
{
bool allSixes = true;
const int DICE_PER_TRY =2;
for(int j = 0; j < DICE_PER_TRY; j++)
{
if(numGen.Next(1, 7) == 6)
{
// still good
}
else
{
allSixes = false;
break; // might a well give up and
// **start the next test**
// (reset the test)
}
}
if (allSixes) succeses++;
}
var triesPerSuccess = TRIES / succeses;

Console.WriteLine(triesPerSuccess);
Console.ReadKey();
}

主要区别在于,您测量的是连续 一系列 throw 中的连续 个六分球。没有理由认为这个问题的答案与 36 分之 1 有任何关系。

关于C# 掷骰子概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48197119/

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