`
rokuan
  • 浏览: 19722 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

投硬币概率模拟程序

阅读更多
#include <stdio.h>
#include <stdlib.h>

//头像面朝上的概率 
int heads()
{
	return rand() < RAND_MAX/2;
}

int main(int argc, char *argv[])
{
	int i, j, cnt; 
	//N为每次实验投币的次数,M为实验的次数 
	int N = atoi(argv[1]), M = atoi(argv[2]);
	int *f = malloc((N+1) * sizeof(int));
	for (i = 0; i <= N; i++)	f[i] = 0;
	for (j = 0; j < M; j++, f[cnt]++)
		for (cnt = 0, i = 0; i <= N; i++)
			if (heads()) cnt++;
	for (i = 0; i <= N; i++)
	{
		printf("%2d ", i);
		for (j = 0; j < f[i]; j += 10)	printf("*");
		printf("\n");
	}
}

执行结果如下:

不过有点疑惑的是这个结果并不是完全与概率学的正态分布吻合,有点小的偏差,而经过几次执行的结果好像都没有变化,这点有点疑问,可能和伪随机数的产生机制有关吧...
  • 大小: 4.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics