题目:已知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);
}方法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;
}已知rand7() 可以产生1~7的7个数(均匀概率),利用rand7()产生rand10()1~10(均匀概率)
原文地址:http://blog.csdn.net/a809146548/article/details/44158293