【经典题目】rand7()生成rand10()——随机数算法
随机数算法的转换
从小数向大数映射
这一类的算法主要分为两种,一种是从小数映射向大数,rand7()-->rand10()
。另外一种是从大数映射向小数rand10()-->rand7()
这道题目是从小数映向大数,核心公式,也就是生成0-6的数字,然后放大7倍,保证每两个数字之间都有七个空位可以填充,然后再生成七个数字进行填充。这种方法的生成的范围是【1-49】((0,6)*7+(1,7),因此最后只需要保留【1-40】的数字即可。
如果进行优化的话,还可以进一步利用生成的【41-49】的随机数,再次放大7倍,如此重复即可。
从大数向小数映射
从大数向小数映射相对简便,只需要保留想要的范围即可
如,rand10()-->rand7()
只需要保留属于1-7的数字,或者借助取模rand50()-->rand7()
,对1-49数值,进行。