【发布时间】:2013-04-22 17:19:23
【问题描述】:
我必须生成一个随机数列表,并且它们必须具有给定的平均差。例如,给定的平均差值为 10,因此这些数字很好:1 3 5 9 15 51。我所做的是将给定的平均差乘以 2 并加 1。像这样:
while (i <= 50000)
{
i += Math.random() * givenAverageDiff * 2 + 1;
list.add(i);
}
但我从来没有得到 5000 或更多。事实上,它总是 4,850 或更少。为什么?假设givenAverageDiff 是 10。我的错误是什么?我该如何解决?
附:用 C 或 PHP 实现对我也有好处。
【问题讨论】:
-
什么是“平均差”?
-
我想知道是否有类型转换搞砸了。我假设
i是int。givenAverageDiff是int还是double? -
@Eddy_Em 我认为这意味着 M 项的序列正在增加,并且 (i_n+1 - i_n) 的总和对于 n=0 到 M-1 = (avg_difference) * (M- 1)。我看不出你怎么能保证这一点,同时又能保持随机性。
-
我刚刚尝试运行这个循环,它对我来说运行得很好。你能告诉我们更多的背景吗?
-
运行正常,但结果不正确。它没有正确的平均差。
标签: java php c algorithm random