我一直在寻找,并找到类似的话题,但无法理解他们或解决如何应用他们。称重号码发生器
简单:我要的是生成1
和100
之间的数字:
- 号
1
到30
应该有60%的概率。 - 数字
31
到60
应该有35%的概率。 - 数字
61
至100
应该有5%的概率。
我一直在寻找,并找到类似的话题,但无法理解他们或解决如何应用他们。称重号码发生器
简单:我要的是生成1
和100
之间的数字:
1
到30
应该有60%的概率。31
到60
应该有35%的概率。61
至100
应该有5%的概率。对我来说最简单的方法是生成四个随机数。第一个数字是1-100。第二个数字是1-30,第三个数字是31-60,第四个数字是61-100。把第一个随机看作是一个百分比。如果它是1-60,则继续运行第二个随机数,如果它是60-95运行第三个随机数,并且如果它是95-100运行第四个随机数。还有其他方法可以缩短,但在我看来,这是最容易理解的。
用此创建随机数字1-100:(int)(Math.random()*100)+1
其余应该只是条件。
获取数字在你的范围
首先产生在3个时间间隔3张的随机数。
1:1-30
2:31-60
3:61-100
生成概率数
接着,产生一个号1-100。如果数字是1-60,则选择第一步中的第一个随机数,如果是61-95,则选择第二个选项,如果是96-100,则选择第三个。
这听起来像一个家庭作业的问题,所以我不会提供代码,但这里是一个简单的算法的描述:
生成介于1和100让我们称之为X,X将使用一个随机数以确定如何生成最终结果:
如果X在1和60之间,则生成1到30之间的随机数,作为最终结果。
如果X在61到95之间,则生成一个31到60之间的随机数作为最终结果。
如果X在96和100之间,生成61到100之间的随机数是您的最终结果。
你可以看到,这需要两个随机数生成每个加权数字,你想要的。它实际上可以简化为一个随机数字生成,而这只是一个练习。
仅供参考,如何生成一个范围内的随机数这里找到:How do I generate random integers within a specific range in Java?
它实际上不是一个家庭作业问题,只是一个项目即时通讯工作从某人我知道如何在一个范围内生成整数,我只是想检查它们是否是一个更简单的方法来做到这一点非常感谢 – djohn316
什么是你用来生成的数字代码? – Envil
[生成加权随机数]可能的重复(http://stackoverflow.com/questions/8435183/generate-a-weighted-random-number) – 2015-06-28 01:55:36