将随机整数分配给数组中的项,summa应该是一个固定的数字
Assign random integer to items in array and summa should ever be a fixed number
这是我的问题
我在一个数组中有一个可变数量的项目
array (x, y, z, ..., n)
我有一个固定的总数分配给一个可变的
$min_int = 0;
$max_int = 8;
$total = 8;
我需要为数组中的每个项分配一个从$min_int到$max_int的随机int,数组中的项总数必须始终=8。
例如:
array (red, green, blue);
$min_int = 0;
$max_int = 8;
$total = 8;
结果可能是
Array
(
[0] => 3
[1] => 5
[2] => 0
)
或
Array
(
[0] => 3
[1] => 3
[2] => 2
)
我会用javascript进行开发。
有什么建议吗?
这是我必须用随机int填充的表的链接。检查客户端的复选框和要填充的天数列,循环必须为所选客户端在所选日期生成随机int,总数必须为=8(col-#SUMMA),因此对于您选择的每一天。
我最直观的猜测是
var max_int = 8;
var first = Math.floor(Math.random() * max_int) + 1;
var second = Math.floor(Math.random() * (max_int - first)) + 1;
var third = max_int - first - second;
但这里可能存在一些数学偏见。我不是数学家,所以这是邀请任何了解统计学的人仔细研究一下。不过,这确实有效,因为如果对第一个、第二个和第三个求和,最终总是得到max_int。
这个解决方案应该满足您的需求:
var $min_int = 0;
var $max_int = 8;
var $total = 8;
var array = new Array(3);
var sum = 0;
var currentMax = $max_int;
for (i = 0; i < array.length; i++) {
if ((i !== (array.length - 1)) && (currentMax > 0)) {
var randomNum = parseInt(Math.random() * currentMax);
array[i] = randomNum;
currentMax -= randomNum;
}
else {
array[i] = currentMax;
}
}
console.log(array);
这种方法:1.在阵列的长度上循环,2.对于每个数组元素,它根据最大值创建一个随机整数并存储3.然后,它将最大值减少刚刚生成的数字的值,并为下一个阵列元素重复
注意#1:如果"新的最大值"已达到0(即,生成的随机数将始终为0,因此无需计算)或逻辑已达到数组中的最后一个元素(即,该元素的值应为剩余的"最大值"),它也将跳过处理。
注2:var $min_int
和var $total
从未实际用于此解决方案。
以下是一些测试值:
对于var array = new Array(3);
[3, 3, 2]
[0, 2, 6]
[8, 0, 0]
[1, 4, 3]
[0, 4, 4]
对于var array = new Array(5);
[4, 0, 1, 0, 3]
[7, 1, 0, 0, 0]
[1, 2, 0, 4, 1]
[3, 4, 1, 0, 0]
[4, 3, 0, 0, 1]
对于var array = new Array(8);
[7, 0, 1, 0, 0, 0, 0, 0]
[3, 2, 3, 0, 0, 0, 0, 0]
[5, 3, 0, 0, 0, 0, 0, 0]
[2, 4, 1, 0, 1, 0, 0, 0]
[7, 0, 1, 0, 0, 0, 0, 0]
相关文章:
- 递增一个数字而不去掉前导零
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 制作一个regex来验证只有一个数字的字符串
- 如何限制一个字段只接受4个数字字符作为输入,并获得'It’这是潜水警报
- 为什么这个正则表达式不't匹配最后一个字母数字字符
- 一个jquery验证器方法,它不接受纯数字或纯特殊字符,但接受上面是否有字母
- 如何拆分一个整数和产生的所有数字来创建一个新数字
- 如何使用至少一个数字、一个大写字母和6-20个字符验证密码
- 当与另一个实例进行比较时,我的类实例如何隐式返回数字
- 简单的Javascript方式,在输入字段的每5位数字后添加一个空格
- 有没有办法在里面看到一个数字'的64位浮点IEEE754表示
- PHP函数识别3个数字中最低的一个并更改其类
- 我如何解析二's是一个数字的补码字符串
- 为什么我需要在这里输入var,为什么它会给我一个数字作为答案?(Javascript)
- 在我的网站上创建一个在1-10之间不断变化的数字时遇到了问题.Javascript
- 如何获取一个以零开头的数字的位数
- 如何创建一个确定2个数字之间值的函数
- 当我添加一个新数字时,如何获得一些数字的即时平均值
- 为什么 JavaScript 如果一个数字有一个前导零,就将其视为八进制