【发布时间】:2018-05-24 04:36:27
【问题描述】:
所以我试图生成一个由 N 个数字组成的序列,其中总和为 S。
现在我正在这样做:
float baseamount = (float)(amount / norders) * 0.8f;
float secondamount = amount / norders;
然后在这两个数字之间生成N个随机数。
但是,这会生成一个非常统一的数字范围,而我想要更随机一些,例如,而不是 (sum = 200, n = 10):
16.92321 17.49378 16.26426 16.03404 16.12497 17.53131 18.10094 16.86982 17.0831 16.06921
我更喜欢:
12.345 17.4534 19.3542342 11.345345 18.4325235 14.4353245 ...
解决这个问题的最佳方法是什么?
【问题讨论】:
-
现在才看
-
由于这些数字是相互依赖的,你不能使用一些独立的随机变量来解决这个问题。
-
你承认这是不可能的吗?总和 = 200,n = 10,每个数字的平均值为 20。因此,随机抽样会产生一些高于 20 和一些低于 20 的数字,以保持总和为 200。根据您的要求,您希望数字清楚地被 20 覆盖,所以所有这些都将小于 20,并且 NO WAY sum 将设置为 200。
-
即使在您的示例中,总和也远未达到 200