关于数学中的统计与概率
  • 板块学术版
  • 楼主王熙文
  • 当前回复32
  • 已保存回复32
  • 发布时间2022/5/29 15:33
  • 上次更新2023/10/28 00:21:35
查看原帖
关于数学中的统计与概率
353688
王熙文楼主2022/5/29 15:33

数学作业有一个关于数豆子的实验,要求出豆子总数。具体来说,是在所有豆子中选择 mm 个豆子做标记,然后打乱后随便挑选 pp 个,若有标记的为 nn 个,则豆子总数 xx 约等于 mpn \dfrac{mp}{n}

但令人费解的是,如果用程序模拟,然后对于每次求出的 xx 取平均数,输出的答案并非是真实的 xx,而是比 xx 稍微大一点。

这是我的程序:

#include<bits/stdc++.h>
using namespace std;

const int x=1000/*总个数*/,m=120/*标记个数*/,p=100/*每次取出来多少*/,times=100000/*取多少次*/;

int a[100010];

void rand_shuffle()
{
	for(int i=2; i<=x+m; ++i) swap(a[i],a[rand()%(i-1)+1]);
}

int main()
{
	srand(time(0));
	double ans=0;
	for(int i=1; i<=x-m; ++i) a[i]=1;
	for(int i=x-m+1; i<=x; ++i) a[i]=2;
	for(int i=1; i<=times; ++i)
	{
		random_shuffle(a+1,a+x+1);
		//rand_shuffle();
		int aa=0; // 标记的有多少个
		for(int j=1; j<=p; ++j) aa+=(a[j]==2);
		ans+=m*p/aa;
	}
	ans/=times;
	cout<<ans;
	return 0;
}

上面这个程序输出约为 10791079

有的时候程序没有输出,是因为 aa=0,此时除法会有问题。我猜想问题应该就出在 aa=0 上,如果没有 aa=0,则答案会偏小(因为在 aa=0 时按理来说答案应当特别大,没有说明会小点),但输出却更大了。不理解。

2022/5/29 15:33
加载中...