我試圖生成一個範圍從-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