我想遵守中心极限定理并编写了该程序。但是我对此感到困惑,必须这样观察。有什么不对吗?
xx
xxx
xxxx
xxxxx
xxxxxx
xxx
xxxx
xxx
x
x
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Func();
}
public static void Func()
{
Random r = new Random();
int[] d = new int [10];
int sum;
for (int k = 0; k < 5000; k++)
{
sum = 0;
for (int i = 0; i < 50; i++)
sum += r.Next(0, 10000);
Set(d, sum/50);
}
DispResult(d);
}
private static void DispResult(int[] d)
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < d[i]; j += 1000)
{
Console.Write("X");
}
Console.WriteLine();
}
}
private static void Set(int[] d, int a)
{
if (a > 9000)
d[9]++;
else if (a > 8000)
d[8]++;
else if (a > 7000)
d[7]++;
else if (a > 6000)
d[6]++;
else if (a > 5000)
d[5]++;
else if (a > 4000)
d[4]++;
else if (a > 3000)
d[3]++;
else if (a > 2000)
d[2]++;
else if (a > 1000)
d[1]++;
else
d[0]++;
}
}
}
最佳答案
不清楚您在这里要问什么,但我会稍作讨论。
您的程序模拟将10000面的模具滚动50次并取平均值。然后,您可以进行5000次操作,并显示结果的直方图。
中心极限定理指出,随着掷骰数的增加,直方图应更接近高斯分布。
如果您要做的是观察中央极限定理的真相,那么我将对程序进行如下修改:我将使“ Func”取整数n,可数,然后使Main的主体为:
for(int n = 1; n < 10; ++n)
{
Func(n);
Console.WriteLine("-----");
}
然后将Func中的所有“ 50”替换为n。
这样,您将模拟滚动1、2、3、4 ... 10个骰子并取平均值。当您绘制直方图时,您会看到1时,直方图是矩形,然后随着n的增加,它的钟形越来越多。这证明了中心极限定理。