已知rand7() 可以产生1~7的7个数(均匀概率),利用rand7()产生rand10()1~10(均匀概率)

题目:已知rand7() 可以产生1~7的7个数(均匀概率),利用rand7()产生rand10()1~10(均匀概率)。

解析:首先利用rand7()产生1-5的5个数,每个数的概率为1/5,然后在这5个数的基础上再以1/2的概率加上5,这样就能以1/10的概率产生每一个数。

答案:

int rand10()
{
	int tmp1,tmp2;

	do
	{
		tmp1=rand7();
	}while(tmp1>5);

	do
	{
		tmp2=rand7();
	}while(tmp2>2);

	return tmp1+5*(tmp2-1);
}

题目2:给定一个rand5(),写出一个rand7()的函数。

方法1:先产生一个rand10()。

答案:

int rand10()
{
	int tmp1,tmp2;

	tmp1=rand5();
	do
	{
		tmp2=rand5();
	}while(tmp2>2);

	return tmp1+5*(tmp2-1);
}

int rand7()
{
	int tmp;

	do
	{
		tmp=rand10();
	}while(tmp>7);
	return tmp;
}
方法2:

int rand7()
{
	int tmp;

	while((tmp=rand5()*5+rand5())>26); //随机产生6-26
	tmp-=3;                            //随机3-23
	tmp/=3;                            //随机1-7
	return tmp;
}


你可能感兴趣的:(编程,C++,c,算法)