我试图生成一个范围从-1到6的随机数,但每次我生成一个随机数的概率获得范围内的数字是由一个百分比给出。例如,在百分比列表中,第一个百分比具有生成6的概率,第二个百分比具有生成5的概率,以此类推。数字必须随机生成。我试图用C编写这个代码。谢谢你的想法。如何生成一个范围内的随机数给定的概率获得其中一个数
回答
您可以得到一个介于0到100之间的随机数,并检查落入的百分比范围并为其分配相应的值。
例如:
0 - 5 : -1
5 - 25 : 0
25 - 31: 1
31 - 48: 2
48 - 50: 3
50 - 75: 4
75 - 87: 5
87 - 100: 6
编辑:
为了实现这一点,你将需要一个或两个阵列,一个存储该百分比边界(意味着5,25,31,48,50 ,在这种情况下为75,87)和另一个存储输出值的数组(如果输出是完全随机的,在这里它们是连续的,你不需要第二个数组)。
然后你打电话rand() * 100.0/RAND_MAX
得到0和100之间rand() % 100 + 1
随机浮动为0和100
之间的随机INT有了这个,你可以使用二进制搜索方法来查找百分比范围这相当于为O (log n)时间。随着指数你找到相应的输出(通过一个数组或功能)
我其实做了这样的事情,但我教我做错了..但谢谢澄清它对我 – user1319817 2012-04-12 20:29:55
我敢肯定还有其他的,可能会更好,这样做的方法,但想到什么是这样的:创建一个包含适当的数组根据你的百分比,每个数字的副本(-1到6)。然后在数组中随机选取一个元素。
这项工作,如果百分比是整数,百分比如0.5%,这将无法正常工作 – SirGuy 2012-04-12 20:28:33
这是一项家庭作业吗?我将不承担,对于具有对人类的信念的缘故)
所以我的意思是,你所有的百分比应为100对不对? 您可以生成一个介于0和100之间的数字,并查看它落入哪个支架。
即如果您的百分数都是[10,20,35,15,10,10]
然后,第一托架是 “< 10”,所以在10产生的任何数目yeilds 6
x < 10 --> 6
10 <= x < (10+20) --> 5
(10+20) <= x < (10+20+35) --> 4
(10+20+35) <= x < (10+20+35+15) --> 3
等。您希望生成1到100之间的随机浮点数以满足例如11.9的精度百分比。
不,它不是一个家务任务;)我只是试图做一个简单的基于文本的游戏。感谢您的输入:) – user1319817 2012-04-12 20:34:13
我认为这样做最简单的方法是考虑下面的比喻:如果你有一个线[0,1],可以认为产生从1到4等同于分裂
S_1 = [0,1/4],S_2 = [1/4,2/4],S_3 = [2/4,3/4],S_4 = [3/4,1]。这样,当你从[0,1]生成一个数字时,如果它落在S_i段上,生成的数字就是i。
如果您想要分配不同的概率每个号码,说P_I,他们你只需要划分不同大小的段,用P_I根据。
例如,对于1 P_1 = 0.1,2 P_2 = 0.4,3 P_3 = 0.2和4 P_4 = 0。3可以使用S_1 = [0,p_1],S_2 = [p_1,p_1 + p_2],S_3 = [p_1 + p_2,p_1 + p_2 + p_3]和S_4 = [p_1 + p_2 + p_3,p_1 + p_2 + p_3 + p_4]
然后你在[0,1]上生成一个统一的随机数,并测试它是否落在S_i中。
您有一个好点。这与我的解决方案非常相似,但范围实际上可以在任何范围内使用,我想,只要比率是正确的。如果您的百分比和随机数生成器已经在该范围内,则设置范围在0到1之间非常好。 – mltsy 2012-04-12 20:36:48
- 1. 用概率分布生成范围内的随机整数
- 2. 在随机字节的给定范围内生成随机数
- 3. 如何在C范围内生成一个随机数?
- 4. 如何生成给定范围内的随机数?VB.NET
- 5. Java在特定范围内生成一个随机数?
- 6. 随机数范围的不同概率
- 7. 生成一个范围内的随机数1 - 10
- 8. 如何从一个范围内生成3个非重复的随机数字?
- 9. 如何在一个类构造函数内的一个设定范围内(不重复!)生成随机int数?
- 10. 使用C#在一个范围内产生一个随机数
- 11. 如何在c中生成一个范围内的随机数字#
- 12. Movable Type:如何生成一定范围的随机数?
- 13. 生成具有一定概率的随机数
- 14. 生成给定概率的随机整数
- 15. 生成一个随机数落入多个范围
- 16. 生成一个随机数得到一个随机列表项
- 17. 如何根据给定的概率生成随机事件?
- 18. 如何比数组中的其他随机数生成一个随机数?
- 19. 在excel中生成一个随机数字范围
- 20. 从大的范围内产生一个随机数,除了从大的范围
- 21. 在集群环境中生成一个范围内(0-100k)的随机数
- 22. 以概率生成随机数
- 23. PHP:多个唯一的随机整数在特定范围内
- 24. 在C++中生成一个随机数,包括一个负范围
- 25. C++:如何从一个数组中生成一个随机数
- 26. 如何获得两个范围之间的随机数?
- 27. 如何获得每个数字的随机数有自己的概率
- 28. 在固定时间内生成一个唯一的随机数
- 29. 如何生成一个随机数
- 30. 如何在每个数字位于数字范围内生成随机数字?
致VTC-ers。这实际上是一个很常见的事情(与本地化相反),虽然它有点复杂的描述。 – bitmask 2012-04-12 20:28:07