制作一个加起来等于某个数字的随机整数数组
Making an array of random integers that add up to a certain number
我想制作一个包含 7 个整数的数组,每个整数都是 2 到 5 之间的随机值。这很简单,但我想制作它,所以这些整数的总和必须为 20。有什么想法吗?
生成6个随机数。
计算这些数字的总和。
如果总和大于19或小于15:重新开始。
第 7 个数是 20 - 总和
从一组 7 个 2 开始。您现在的总和为 14。将 1 加到数组中的随机位置六次,注意不要将值溢出到超过 5:
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)
如果您需要确保在每个位置获得完全相同的分布,请执行以下操作:
- 计算一个包含所有可能序列的列表
- 随机选择其中一个序列
我想制作一个包含 7 个整数的数组,每个整数都是 2 到 5 之间的随机值。这很简单,但我想制作它,所以这些整数的总和必须为 20。有什么想法吗?
生成6个随机数。
计算这些数字的总和。
如果总和大于19或小于15:重新开始。
第 7 个数是 20 - 总和
从一组 7 个 2 开始。您现在的总和为 14。将 1 加到数组中的随机位置六次,注意不要将值溢出到超过 5:
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)
如果您需要确保在每个位置获得完全相同的分布,请执行以下操作:
- 计算一个包含所有可能序列的列表
- 随机选择其中一个序列