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

2019-01-20 21:51:47 +08:00
 commoccoom
24068 次点击
所在节点    Python
167 条回复
impanghu
2019-01-20 21:53:20 +08:00
mark 我也想知道
alvin666
2019-01-20 21:55:01 +08:00
这就不叫随机数吧...

而且最简单的方法就是随机生成,然后总和 /100 = k,每个数再 /k
celeron533
2019-01-20 22:00:32 +08:00
在一根 1 到 100 的数轴上,随机取 9 个点,拿到 10 个线段。计算每个线段的长度,即是取值。
weijidong
2019-01-20 22:01:31 +08:00
关注
weijidong
2019-01-20 22:02:47 +08:00
@celeron533 牛逼
JCZ2MkKb5S8ZX9pq
2019-01-20 22:05:14 +08:00
需要补全一下问题,比如你现在包含 0,是否确定?另外 10 个随机数可以重复吗?
如果不可以重复,那第一步取值范围就剩 1-55 或者 0-64 了。
Kagari
2019-01-20 22:05:30 +08:00
@celeron533 #3 稳了,反正没要求是整数
JCZ2MkKb5S8ZX9pq
2019-01-20 22:07:00 +08:00
有个思路是先在一个范围里随机取 10 个数,然后 sum,然后缩放到 100,然后做点去重的偏移。
commoccoom
2019-01-20 22:07:47 +08:00
@JCZ2MkKb5S8ZX9pq 包含 0 和 100,可以重复,需要是整数 @Kagari
chinvo
2019-01-20 22:08:15 +08:00
在马桶上随便写写,没怎么仔细想,各位见笑

伪代码

func(nums: array = [0])
if i=nums.length < 11
nums[i] = rand(nums[i-1], 100)
return func(nums)
nums.removeAt(0)
return nums

func()

但是严格意义上讲,虽然数列中的每个元素都是随机函数生成的,但是这个数列并不是随机数列
chinvo
2019-01-20 22:09:55 +08:00
@JCZ2MkKb5S8ZX9pq #6 不含 0 是 (0, 100]
F1024
2019-01-20 22:15:10 +08:00
递减呗
emric
2019-01-20 22:18:04 +08:00
fisher yates 洗牌算法,生成 1~100 数组打乱即可。
alvin666
2019-01-20 22:18:38 +08:00
@celeron533 这根本不是随机数
JCZ2MkKb5S8ZX9pq
2019-01-20 22:25:09 +08:00
照着 @celeron533 思路
points = [random.randint(0, 100) for i in range(9)] # 生成 9 个随机点
points = [0] + sorted(points) + [100] # 排个队
points = [points[i + 1] - points[i] for i in range(10)] # 算每段距离
print(points, sum(points))
emric
2019-01-20 22:26:17 +08:00
忽略我上面的答案,没认真审题...
smdbh
2019-01-20 22:36:45 +08:00
那就生成 9 个随机数,范围看你需求
最后一个 100 - 9 个和 不就好了。
chinvo
2019-01-20 22:38:28 +08:00
@smdbh #17 你这样分布可能不够分散
zys864
2019-01-20 22:56:06 +08:00
生成 9 个随机数,然后用 100 减去 9 个数的和作为第十个数
niuoh
2019-01-20 23:16:03 +08:00
第一次取 0 到 100 第二次取 0 到 100 减第一个数

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

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

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

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

© 2021 V2EX