高尔顿钉板,其设计者为英国生物统计学家高尔顿,指的是每一黑点表示钉在板上的一颗钉子,它们彼此的距离均相等,上一层的每一颗的水平位置恰好位于下一层的两颗正中间
然后将数枚小球投入,最后会在下面形成正态分布的形状
正态分布公式:
下面是用C++模拟该过程的代码:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define Ball_Num 200//模拟投入小球的数量
#define Level_Num 9 //高尔顿钉板的层级
void GaltonBoard(int *GB)
{
srand((int)time(NULL)); //时间为种的随机数
for(int i=0;i<Ball_Num;++i) //投入小球次数
{
int k=0; //k代表小球随机到左边(右边)的次数
for(int j=0;j<Level_Num;++j) //每一层都随机进入左边或者右边
{
if(rand()%2==1)
{
k++;
}
}
GB[k]++; //最后小球进入的格子里面的计数+1
k=0;
}
}
void printGaltonBoard(int *GB)
{
for(int i=0;i<Level_Num;++i)
{
for(int j=0;j<GB[i];++j)
{
printf("#");
}
printf("\n");
}
}
int main()
{
int GB[Level_Num]={0};
GaltonBoard(GB);
printGaltonBoard(GB);
}
最后得到结果如下: