请教一个问题,生成 10 个随机数 [0,100] 且最终 10 个随机数之和为 100 , 用 Python 如何实现

2019-01-20 21:51:47 +08:00
 commoccoom
24113 次点击
所在节点    Python
167 条回复
lance6716
2019-01-20 23:19:59 +08:00
凡是描述概率问题的时候不给分布瞎答就可以了
ps1aniuge
2019-01-20 23:20:13 +08:00
$数组 = 1..100
while ($true)
{
$a,$b,$c,$d,$e,$f,$g,$h,$i,$j = Get-Random -InputObject $数组 -Count 10
$和 = $a + $b + $c + $d + $e + $f + $g + $h + $i + $j
if ($和 -lt 120)
{
Write-Host "$a $b $c $d $e $f $g $h $i $j $k"
}
}

上面的 powershell 代码,设定值小于 120 时 ,5 分钟没出结果。
我估计 -eq 100 得一年才能出结果。而设定 -lt 200 很好出结果,大家可以试试。
evgm
2019-01-20 23:25:52 +08:00
生成一个[0, 100] 的随机数,第二个数范围是 [0, 100-num1],第三个是[0, 100-num1-num2],以此类推?
epicnoob
2019-01-20 23:27:08 +08:00
你这个不能叫随机数,近似使用可以 10+randint(-10,10)
Vegetable
2019-01-20 23:29:01 +08:00
很有意思的问题,有很多实现方式,随着限制条件(去重,整数,负数)的增加,变数更多,很适合作为面试口答题哦。
stevenbipt
2019-01-20 23:29:21 +08:00
生成 9 个,最后一个用 100 减去🌚🌚🌚
18219304774
2019-01-20 23:39:24 +08:00
Python 没学过,用 js 实现一个

var arr=new Array(10);
for(let i=0; i<10; i++){
arr[i]=0;
}
for(let i=0; i<100; i++){
var index=Math.floor(Math.random()*10);
arr[index]++
}
flowfire
2019-01-20 23:41:04 +08:00
3 楼正解,取 9 个点然后拿到十个线段长度即可,如果需要整数,可以规定随机到的九个点都是整数即可
ticotico
2019-01-20 23:45:08 +08:00
random 取整数,加和,映射到 100 内( 100/加和总数*十个数总值)
结果:前九个数+0.5 取整
最后一个数 100-前九个数的合

这个问题就是微信红包是怎么随机分配的吧
gransh
2019-01-21 00:15:37 +08:00
10 个数和为 100,均值也就是 10,也就是说最好在 0-20 里面取值。
而且绝对不能取到大于 91 的数,92-100 已经被排除在外了
这种条件,还能叫随机吗
jinyang656
2019-01-21 00:27:59 +08:00
https://gist.github.com/fei-ke/2e86bce8aa52bff5d0bf

好多年前写过一个微信红包的算法( Java 的),可以拿去参考一下
luozic
2019-01-21 00:41:51 +08:00
直接 100 落概率桶,总和为 10,难道还有负数?
dapang1221
2019-01-21 00:44:21 +08:00
关键在于随机数不一定要同时生成吧
第一个数 n[0] = rand(0, 100);
第二个数 n[1] = rand(0, 100 - n[0]);
第三个数 n[2] = rand(0, 100 - n[0] - n[1]);
而且应该也是均匀分布的吧
AX5N
2019-01-21 00:44:45 +08:00
@gransh 可以取大于 91 的数。
AX5N
2019-01-21 00:50:07 +08:00
还是 3 楼的答案最好
xujunfu
2019-01-21 00:53:43 +08:00
感觉三楼解法,稍微有 bug,就是有可能 9 个数全部落在 1 点(9 个点中有重复数出现);个人觉得这是个线性代数问题,先求解线性方程 组 x1+x2+…… x10=100 的所以解,然后从解的集合随机取出。
CEBBCAT
2019-01-21 00:56:19 +08:00
这不就是微信红包算法吗?
Linxing
2019-01-21 01:03:45 +08:00
随机十次 每次范围都是 100 减去余下的数
Linxing
2019-01-21 01:04:34 +08:00
额 说错了 随机九次
ywcjxf1515
2019-01-21 01:20:36 +08:00
就没人想到深度优先搜索嘛,深度优先能用其他图算法就可能能用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/528903

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX