我想证明掷骰子出现6的概率是1/6,连续两次掷出6的概率是1/36。我编写的程序试图模拟这个过程。
为了更好地解释我的代码,“attempts”是掷骰子的次数。“diceRoll”是我用来模拟掷骰子的变量。“successiveAttempts”是测量是否连续掷出6的变量,如果没有,则重置while循环。我在while循环中重复10000次,以便多次重复掷骰子测试并得到结果的平均值。因为有时会在3次或80次尝试中连续掷出6,所以我想通过重复过程10000次来获取结果的平均值。
“percentage”是attempts除以测试重复的次数,以获取每次掷骰子的平均尝试次数。当我将while循环中的数字更改为1时,它返回我的程序中的数字6,这是正确的。平均需要6次尝试才能掷出6。但是当我将数字更改为2个连续尝试时,返回42,这是不正确的。平均需要36次尝试才能连续掷出两个6。
我无法弄清楚为什么当while循环中的数字为1和2时,程序的运行情况不同。有人能解释一下我错在哪里吗?如果我的代码令人困惑,我很抱歉,我是初学者,非常困惑。如果有人能帮助我,我将非常感激。
为了更好地解释我的代码,“attempts”是掷骰子的次数。“diceRoll”是我用来模拟掷骰子的变量。“successiveAttempts”是测量是否连续掷出6的变量,如果没有,则重置while循环。我在while循环中重复10000次,以便多次重复掷骰子测试并得到结果的平均值。因为有时会在3次或80次尝试中连续掷出6,所以我想通过重复过程10000次来获取结果的平均值。
“percentage”是attempts除以测试重复的次数,以获取每次掷骰子的平均尝试次数。当我将while循环中的数字更改为1时,它返回我的程序中的数字6,这是正确的。平均需要6次尝试才能掷出6。但是当我将数字更改为2个连续尝试时,返回42,这是不正确的。平均需要36次尝试才能连续掷出两个6。
我无法弄清楚为什么当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();
}
Random.Next(int,int)
使用的是一个不包括上限的范围。Next(1,7)
返回的数字在1到6之间。 - BJ Myersx66
和66x
,其中x = 1..5;第11个是666
)。因此,你可以清楚地看到你的方法是有缺陷的。你应该重复10000次掷两个骰子的过程。如果两个都是6,则算作成功。计算成功的次数并除以10000,你应该得到大约0.02777(即1/36)。 - Chris