当前位置:   article > 正文

java 指定平均值和取值范围生成随机数(随机100到10000平均值是1000,最大值,最小值)_指定平均值和范围生成随机数

指定平均值和范围生成随机数

需求场景:抽奖送积分,积分范围100-10000,要求平均1000积分。

这是一个很常见的需求,但是很难下手,一般人的解决方案都是先随机几个数值判断或者第一次随机一个小的第二次随机一个大的。

其实如果把需求转换成数学函数你就会豁然开朗:

给定离散函数y=f(x)(x∈[100,10000],y>=0,),使得y的期望值为1000。

但,这种函数千千万,鬼知道是哪个...

正所谓弱水三千我们只需一瓢,我们又不是来解数学题的,只要找到一个符合条件的不就行了。

首先这个函数必须是曲线,所以我们就取最简单的曲线y=ax²和y=1/ax。

博主身先士卒,试过了y=ax²并不行,所以此处选择y=1/ax的双曲线。

还是那句话弱水三千我们只需一瓢,越简单越好所以直接指定a=1,为了更方便计算,我们再指定x=1时y=0,这样就选好了一个双曲线y=1/x-1。然后根据数学函数的特性,我们只需要找到区间[m,1],最大值f(m),最小值0,平均值是1000/(10000-100)*f(m)(就是y值的0.1010101倍)就可以解决随机的问题了。

定积分肯定少不了了:

x=1时y=0所以平均值就是:dx/(1-m)

回回神,整个逻辑梳理一下,最终的结果就是:(-ln(m)-(1-m))/(1-m)=平均值,平均值=0.1010101*(1/m-1),求m的值。

虽然已经简化这么多,但博主反正是求不出来这个m的值

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/107009
推荐阅读
相关标签