题目:已知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