C语言实现高尔顿钉板实验(模拟正态分布)

高尔顿钉板,其设计者为英国生物统计学家高尔顿,指的是每一黑点表示钉在板上的一颗钉子,它们彼此的距离均相等,上一层的每一颗的水平位置恰好位于下一层的两颗正中间

然后将数枚小球投入,最后会在下面形成正态分布的形状

正态分布公式:

下面是用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);
}

最后得到结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值