Arrays 生成一个随机整数数组,这些随机整数相加到某个数字

Arrays 生成一个随机整数数组,这些随机整数相加到某个数字,arrays,algorithm,integer,Arrays,Algorithm,Integer,我想制作一个由7个整数组成的数组,每个整数都是2到5之间的随机值。这很简单,但我想让这些整数的总和必须是20。有什么想法吗?生成6个随机数 计算这些数字的总和 如果总和大于19或小于15:重新开始 第七个数字是20-和从七个2的数组开始。你现在的总数是14。将一个值添加到数组中的随机插槽中六次,注意不要将值溢出超过五次: arr = {2, 2, 2, 2, 2, 2, 2} n = 6 while n > 0: m = random(7) if arr[m] <

我想制作一个由7个整数组成的数组,每个整数都是2到5之间的随机值。这很简单,但我想让这些整数的总和必须是20。有什么想法吗?

生成6个随机数

计算这些数字的总和

如果总和大于19或小于15:重新开始


第七个数字是20-和

从七个2的数组开始。你现在的总数是14。将一个值添加到数组中的随机插槽中六次,注意不要将值溢出超过五次:

arr = {2, 2, 2, 2, 2, 2, 2}
n = 6

while n > 0:
    m = random(7)
    if arr[m] < 5:
        arr[m]++
        n--

蛮力:继续重新计算,直到得到答案

import random

def random_sums_to(lower, top, n, sums_to):
    a = [random.randint(lower, top) for _ in range(n)]
    if sum(a) != sums_to:
        return random_sums_to(lower, top, n, sums_to)
    return a

print random_sums_to(2, 5, 7, 20)

如果您需要确保在每个位置获得完全相同的分布,请按以下步骤操作:

计算包含所有可能序列的列表 随机选取其中一个序列
我建议您编写一些代码:在你写了一些代码,但它没有达到你期望的效果之后,我会发布一个问题。否则,这类问题更像是一个代码高尔夫问题,而不是编程问题。为了达到您的目标,您不能有均匀分布的整数。对预期分布有限制吗?没有,没关系。谢谢你的回答。改进:一旦你看到你将超过20,如果你添加2*个剩余数字,就重新开始。或者更改最后一个数字,而不是重新开始。@ChronoTrigger在某些条件下修改部分集是很困难的,例如,重新计算单个数字,因为它太容易破坏完美的随机性。例如,您的建议倾向于使最后一个数字比其他数字小。请注意,这并不能使数字的分布均匀,事实上,我相信对于较大的数据集,最后一个数字是正态分布的。@amit我同意,最后一个数字不是均匀分布的。我认为这可能会使5小于4等,但不是每个元素的预期值为20/7,所以至少有点短于3?这有一种风险,这种风险会持续很长时间,这确实是暴力解决方案的风险,但对于问题中给出的值,它会在毫秒内返回一个答案。随机和暴力相结合的风险更大