例如,我输入“10”作为数值,“10000”作为总金额.
该脚本需要随机分配10个不等于10000的数字.没有更多的,不可少的.
但它也需要动态.如同有时候,有时候,我可能会将“5”或“6”甚至“99”作为数值,以及任何数字(高达十亿甚至更高)作为总数.
我该怎么做呢?
编辑:我也应该提到所有的数字都需要一个正整数
这里的正确答案是令人难以置信的简单.
想像一条白线,我们说1000单位长.
您想要将线划分为十个部分,使用红色标记.
非常简单,选择九个随机数,并在每一个点上放上一个红色的油漆标记.
这只是那么简单.你完成了!
因此,算法是:
(1)选择0到1000之间的9个随机数
(2)将九个数字,一个零和一个1000,放在一个数组中
(3)排序数组
(4)使用减法得到数组值之间的十个“距离”
你完成了.
(显然,如果你想在你的最终集合中没有零,那么在第(1)部分中,如果碰撞发生,只需重新选一个随机数.)
理想地作为程序员,我们可以“看到”这样的视觉算法,我们的头脑 – 试图视觉上看我们做什么!
脚注 – 对于任何非程序员阅读这个,只是为了清楚,请注意,这就像“学习计算机科学时学习的第一件事!”即我没有得到任何信用,我刚刚输入了答案,因为我偶然发现页面.没有任何礼物给我!
只是为了记录另一种常见的方法(取决于预期的结果,无论你是处理真实或全数,还有其他约束)也是非常“啊哈!优雅.你所做的就是这样:得到10个随机数字.添加它们显而易见,只是:将它们全部乘以一些数字,以便总计是所需的总数!这很容易!