【发布时间】:2014-01-15 00:39:57
【问题描述】:
我想产生 X 个随机数,每个随机数来自区间 <0; Y>(给定 Y 作为每个数字的最大值),但有限制,这些数字的总和必须等于 Z。
示例:
5个随机数,每个最多6个,总和必须等于14,例如:0, 2, 6, 4, 2
是否已经有可以做类似事情的 C/C++ 函数?
就我个人而言,我只能想出一些丑陋的 if-else-constructs。
【问题讨论】:
-
也许使用
std::uniform_int_distribution,跟踪剩余数字的限制,并用std::shuffle结束它,所以第一个不会比最后一个更特别。 -
@chris 他不关心重复,从他的示例输出来看
-
@BWG,不考虑重复。限制跟踪是在你得到 6 6 开始的情况下。
-
@chris 他们没有被考虑在内。因为他不在乎。那么如果他以6-6开始呢?它生成一个随机序列,因此 6-6 是可接受的开始。他的问题没有提到分布模式。
-
@user2685786 在这种情况下,您可能需要更新您的问题,因为您说的是“Z 的最大值”。听起来你的意思是总数必须是“正好 Z”。
标签: c++ algorithm random sum max