【发散思维系列】已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。

此问题目的,rand10() 每个数出现的概率为10%。

已知rand7()中每个数出现的概率是相等得,根据排列组合中的分类,可以得到如果rand7()*rand7()则结果概率为1/49。

要想爱你个得到概率为10%的数,可以构造一个1-10*n的均匀分布的随机整数区间(n为任何正整数)。

假设x是这个1-10*n区间上的一个随机整数,那么x%10+1就是均匀分布在1-10区间上的整数,而rand7()*7+rand7()正好可以得到的1-49之间任何数,概率同样为1/49。

去除41-49之间的数,根据%10运算就可以得到一个概率为1/10,值在0-9之间的数,加1即可得到结果。

原文地址:https://www.cnblogs.com/claresun/p/3063921.html