|
|
1
10
你想用红色标记把这条线分成十部分。
就这么简单。你完了! 因此,算法是: (2) 把九个数字,一个0,一个1000,放在一个数组里 (3) 对数组排序 你完了。 (显然,如果您想在最后一个集合中没有零,那么在第(1)部分中,如果发生冲突,只需重新选择另一个随机数。) 理想情况下,作为程序员,我们可以在头脑中“看到”这样的可视化算法——无论我们做什么,都要试着用可视化的方式思考!
另一种常见的方法(取决于期望的结果,不管你是处理实数还是整数,以及其他限制条件)也是非常“啊哈!”优雅的。你要做的就是:得到10个随机数。把它们加起来。非常简单,只是: 把它们全部乘以或除以某个数,这样,总数就是所需的总数! 就这么简单! |
|
|
2
3
将最大剩余金额设置为目标数字
获取一个从0到最大剩余量的随机数
重复循环 你会得到一个“余数”,所以最后一个数字是由剩余的部分决定的,以弥补原来的总数。 |
|
|
3
2
生成10个随机数直到10000。 从大到小排序:g0到g9
这将在整个范围内产生10个随机数,总计10000个。 |
|
|
4
2
我相信@JoeBlow提供的答案基本上是正确的,但是
这就引出了前面提到的关于这些数字的理想分布的问题。乔布洛方法 确保元素1和元素2有相同的几率成为数字x,这意味着它 总之,说元素的“随机”列表是错误的 必要地 均匀分布。如上文其他评论所述,缺少的元素是所需的分布。 为了证明这一点,我提出了以下解决方案,其中包含随机分布模式的序列随机数。如果第一个元素在0-N之间的任何数字上有相等的机会,并且随后的每个数字在0到[剩余总数]之间的任何数字上有相等的机会,那么这样的解决方案将是有用的:
可能有必要在创建这些元素后,根据它们的使用方式,对它们的顺序进行随机排序[否则,每个元素的平均大小会随着每次迭代而减小]。 |
|
5
0
这将为您提供一些随机值,当添加这些值时,将产生最终值(忽略浮点问题)。 应该是容易实现的一半。 不过,您将在某个时候达到PHP的最大整数限制。不知道这能在多大程度上用于接近10亿甚至更高的价值。 |
|
|
6
0
相关: http://www.mathworks.cn/matlabcentral/newsreader/view_thread/141395 看到这个了吗 MATLAB package 这就是实现(罗杰·斯塔福德):
|