实验原理:
从入口处放进一个直径略小于两颗钉子之间的距离的小圆玻璃球,当小圆球向下降落过程中,碰到钉子后皆以1/2的概率向左或向右滚下,于是又碰到下一层钉子。如此继续下去,直到滚到底板的一个格子内为止。把许许多多同样大小的小球不断从入口处放下,只要球的数目相当大,它们在底板将堆成近似于正态 的密度函数图形(即:中间高,两头低,呈左右对称的古钟型),其中n为钉子的层数。
代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h> //时间种子
#define M 100000 //实验次数
#define N 30 //层数
#define R 100 //缩放比例
void print(int a[N]); //画出正态分布图
int main()
{
printf("模拟实验次数为%d,层数为%d\n",M,N);
srand((int)time(NULL));
int i,j,k,x;
int a[N+1]={0};
for(i=0;i<M;i++) //模拟次数
{
k=0;
for(j=1;j<=N;j++) // 层数
{
x=rand()%2;
if(x==1)
k++;
}
a[k]++;
}
for(i=0;i<=N;i++)
printf("%d:%d ",i,a[i]);
printf("\n");
print(a);
getchar();
return 0;
}
void print(int a[N+1])
{
int i,j;
printf("缩放比例为1:%d\n",R);
for(i=0;i<N+1;i++)
{
printf("%d",i);
for(j=1;j<=a[i]/R;j++)
printf("#");
printf("\n");
}
}
运行结果
实验次数和缩放比例可以自己调整
实验结果
和正态分布的分布趋势相同。