выбрать случайный элемент из массива, повторять, пока не будет выполнено условие - PullRequest
0 голосов
/ 19 июня 2019

У меня есть следующая проблема: у меня исправлена сумма [30] и массив чисел. Мои вопросы: как вычесть случайные числа num из суммы, пока я не получу оставшееся число> 1, <2, как 1,09 или 1,05? </p>

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];

console.log ()

[30]

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

[1.09]

console.log (еще раз)

[30]

[7.99,
6.99,
4.99,
6.99,
1.99,

[1.05]

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Вам необходимо использовать 0/1 рюкзак динамическое программирование здесь.Это стандартная проблема ранца.

Предположим, вы пытаетесь набрать первый номер.Вы можете вычесть это число из суммы или проигнорировать это число.Так что вы попробуете все возможности.Этот вид берущий / не берущий называется 0/1 ранцем.

Вы можете узнать 0/1 рюкзак по этой ссылке: https://www.geeksforgeeks.org/0-1-knapsack-problem-dp-10/

0 голосов
/ 19 июня 2019

Функция ожидает, что вы дадите ей целевую сумму (как число, а не массив с 1 элементом), массив возможных значений вычитания и целевой массив из 2 элементов - min и max.

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;
var target = [1, 2];

function subtract(sum, num, target) {

  // pick a random index of whatever array is provided.
  const randomIndex = Math.round((num.length - 1) * Math.random());

  // * 100 / 100 is to successfully round to the 2nd decimal place.
  const newSum = Math.round((sum - num[randomIndex]) * 100) / 100;

  if (newSum >= target[1]) {
    console.log(`Subtracted ${num[randomIndex]}. Result is ${newSum}.`);
    subtract(newSum, num, target);
  }
  else if (newSum > target[0] && newSum <= target[1]) {
    console.log(`Subtracted ${num[randomIndex]}. Result is ${newSum}. Done.`);
  }
  else {
    console.log(`Couldn't subtract ${num[randomIndex]}. Result is ${sum}.`);
    subtract(sum, num, target);
  }
}

subtract(sum, num, target);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...