Javascript 从数组中选择一个随机元素,重复此操作直到满足条件

Javascript 从数组中选择一个随机元素,重复此操作直到满足条件,javascript,arrays,sum,fixed,Javascript,Arrays,Sum,Fixed,我有以下问题:我有一个固定的 求和[30]和数字数组。我的问题是如何从求和中减去num的随机数,直到得到剩余数>1,这里需要使用0/1背包动态规划。这是标准的背包问题 假设您正在尝试第一个号码。您可以从总和中减去这个数字,也可以忽略这个数字。所以你会尝试所有的可能性。这种带/不带的称为0/1背包 您可以通过此链接学习背包:函数希望您为其指定一个目标和(作为数字,而不是包含1个元素的数组)、一个可能的减法值数组和一个包含2个元素的目标数组(最小值和最大值) var num=[0.99,1.99,

我有以下问题:我有一个固定的
求和[30]和数字数组。我的问题是如何从求和中减去num的随机数,直到得到剩余数>1,这里需要使用0/1背包动态规划。这是标准的背包问题

假设您正在尝试第一个号码。您可以从总和中减去这个数字,也可以忽略这个数字。所以你会尝试所有的可能性。这种带/不带的称为0/1背包


您可以通过此链接学习背包:

函数希望您为其指定一个目标和(作为数字,而不是包含1个元素的数组)、一个可能的减法值数组和一个包含2个元素的目标数组(最小值和最大值)

var num=[0.99,1.99,2.99,3.99,4.99,5.99,6.99,7.99,8.99,9.99];
var总和=30;
var目标=[1,2];
函数减法(和、数、目标){
//选择提供的任何数组的随机索引。
const randomIndex=Math.round((num.length-1)*Math.random();
//*100/100成功四舍五入到小数点后第二位。
const newSum=Math.round((sum-num[randomIndex])*100)/100;
如果(newSum>=目标[1]){
log(`Subtracted${num[randomIndex]}。结果是${newSum}.`);
减法(newSum、num、target);
}

否则,如果(newSum>target[0]&&newSum在这里非常不清楚,请详细说明您在寻找什么如果您从数组中随机抽取数字,您很容易遇到这个问题:30-(9.99+7.99+5.99+8.99)因为num中的最后一个随机项不幸太大了,所以请给出一个负数。这还不清楚。因此,请澄清一下,您有一个特定的数字“和”(在示例中是30),还有一个其他数字数组“num”(在示例中[0.99、1.99、2.99、3.99、4.99、5.99、6.99、7.99、8.99、9.99])。您想继续从“和”中减去一个随机的“num”,直到得到一个介于1和2之间的减去值?如果减法值小于1,会发生什么情况?@allu显然-再试一次。用户说“直到”介于1和2之间2@Smytt不,allu是对的。如果随机数构成“和”,会发生什么在1?下。问题绝对不清楚基本上-获取一个随机索引以从数组中选取一个减法值。尝试进行减法。如果结果大于2-成功。使用新的和再次调用函数。如果结果低于最小值-失败。使用新的随机索引重试。如果结果介于最小值和最大值之间-su成功!减法现在完成了。非常感谢您亲自回答,这正是我需要的建议。@BFM很乐意帮忙
var num= [0.99, 1.99, 2.99, 3.99, 4.99, 5.99, 6.99, 7.99, 8.99, 9.99];
var sum= [30];
[30]

[0.99,
1.99,
0.99,
4.99,
6.99,
1.99,
2.99,
4.99
2.99]

[1.09]
[7.99,
6.99,
4.99,
6.99,
1.99,

[1.05]