我想遵守中心极限定理并编写了该程序。但是我对此感到困惑,必须这样观察。有什么不对吗?

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的增加,它的钟形越来越多。这证明了中心极限定理。

09-11 18:41