c - 如何在给定获得其中一个数字的概率的范围内生成随机数

标签 c

我正在尝试生成一个 -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 之间的随机 float ,或者调用 rand() % 100 + 1 获取 0 到 100 之间的随机整数.

有了这个,您可以使用二进制搜索方法在 O(log n) 时间内找到它对应的百分比范围。使用索引可以找到相应的输出(通过数组或函数)

关于c - 如何在给定获得其中一个数字的概率的范围内生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10131198/

相关文章:

c++ - 字符编码独立字符交换

c - 海合会错误 : "Inputtools.c:85: error: conflicting types for ‘strcasestr’ "

c - 为什么 gcc 在读取时保留被调用者保存寄存器?

c - C语言循环中出现malloc/free时的Segmentation fault

c - 我写了一个程序来打印所有素数直到给定一个数字

c - 按第三次按钮后 AVR 代码停止工作

C scanf - 未知数组大小

c++ - 错误忽略某些文件

c - C 矩阵的内存是否连续?

c - 有用于 zOS 的 C 调试器吗?