Алгоритм возможных комбинаций по двум числам

Есть задача: даны два числа 7 и 10. Есть число K = 16. Нужно вывести все комбинации чисел 7 и 10 чтобы их сумма была равна не менее K Например:

  1. 10 + 7 = 17
  2. 7 + 7 + 10 = 24 Здесь вариантом с самой минимальной и наиболее близкой к К является №1. Если сумма варианта равна К, то дальше считать не имеет смысла. Важно получить комбинацию по сумме наиболее близкую к К.

Помогите, пожалуйста, с решением данной задачи. Если можно, то на языке php или js.


Ответы (1 шт):

Автор решения: Igor

function calc(a, b, k) {
  let na = Math.ceil(k / a); 
  let nb = Math.ceil(k / b); 
  let ca = na, cb = 0, diff = na * a - k;

  for (let i = na; i >= 0; i--) {
    for (let j = nb; j >= 0; j--) {
      let d = i * a + j * b - k;
      if (d < 0)
        break;
      if (d < diff) {
        diff = d;
        ca = i;
        cb = j;
      }
    }
  }
  
  return `${a} * ${ca} + ${b} * ${cb} - ${k} = ${diff}`;
}

console.log(calc(7, 8, 20));
console.log(calc(3, 8, 100));
console.log(calc(7, 10, 16));

→ Ссылка