您需要生成一个数字数组以便以后使用它们。条款:
- 总金额已设定
sum - 最小值已设置
min - 最大值已设置
max - 设置数字的个数
count,使最小值之和不超过总和min * count < sum,最大值之和不小于总和max * count > sum - 所有数字的总时间必须等于指定的
numbers.Sum() == sum - 数字必须在从
min到的范围内是随机的max
函数签名:
int GenerateNumbers(int min, int max, int count, int sum)
我想从最小值开始按升序排列数字序列,然后对数组进行洗牌。但是如何计算我们将增加的值不明白。
你能告诉我如何写一个算法吗?
让总时间
T,停顿次数N,最小停顿t。为每个暂停分配
t,保留F=T-Nt。现在让我们生成
N随机数R[i]计算它们的和S归一化,使总和为F并添加最少的停顿
考虑到我对 EnSO 的回答中的最大值(没有一个总和,而是一个平均值,易于修改。Python 中有一个代码和 C# 的链接)。
我注意到限制越多,分布就越不均匀,但对于许多实际目的来说,这不是问题。
生成0..1范围内的随机值
找到他们的意思
应用线性变换