【发布时间】:2019-11-05 11:48:38
【问题描述】:
首先,我相信这也是基于数学的,所以 mods,如果这不是解决此类问题的正确位置,请随时将其迁移到适当的位置。我在这里问,因为我希望在编程中实现这个问题,特别是在 C++ 中。
假设以下场景: - 我想RNG一个0到8之间的数字 - 有一个额外的输入考虑到正在生成的数字,以这种方式为某些数字提供更好的赔率(我会尽量清楚):
如果用户输入'0',则要生成的数字有以下机会出现:
'0' - weight of 5,
'1' - weight of 4,
'2' - weight of 3,
'3' - weight of 2,
'4' - weight of 1,
'5' - weight of 0,
'6' - weight of 0,
'7' - weight of 0,
'8' - weight of 0,
所以得到随机“0”的几率是得到“4”的5倍,得到“5”、“6”、“7”和“8”的几率为零。
如果用户输入“4”,则权重如下:
'0' - weight of 1,
'1' - weight of 2,
'2' - weight of 3,
'3' - weight of 4,
'4' - weight of 5,
'5' - weight of 4,
'6' - weight of 3,
'7' - weight of 2,
'8' - weight of 1
在这种情况下,所有数字都有机会出现,但有利于生成数字“4”。 此外,数字“3”和“5”出现的机会相同,但概率低于数字“4”。
等等。
这可以翻译成如下图所示的权重表:
考虑到我已经把问题说清楚了(如果没有,请告诉我!我会尝试用更好的方式解释),如何设计解决这个问题的方法?
我标记 c++ 是因为这是我正在学习的语言,但这通常可以应用于任何语言。
最好的问候!
【问题讨论】:
标签: c++ math random probability weighted