@rd100

Как равномерное распределить целое число, если при делении на количество людей есть остаток?

Есть число 751
Есть 3 человека и нам нужно разделить его в зависимости от рабочих часов, но так, чтобы распределились все средства без остатка.
Например, один работал 12, другой 18, а третий 13 часов.
  • Вопрос задан
  • 57 просмотров
Решения вопроса 1
Aetae
@Aetae
Тлен
function split(sum, ...results) {
  // делим число на общее количество часов
  const part = sum / results.reduce((a, b) => a + b);

  // каждые часы умножаем на результат деления и округляем
  const result = results.map(hours => Math.round(hours * part));

  // финальная сумма с учётом округлений
  const resultSum = result.reduce((a, b) => a + b);

  // разница между финальной суммой и изначальной
  const difference = sum - resultSum;

  // если есть разница
  if(difference) {
    // выбираем рандомно счасливчика\неудачника 
    // за счёт которого компенсируем разницу
    // поменяй если надо выбрать кого-то конкретного :)
    const luckyIndex = Math.floor(Math.random() * result.length);
    result[luckyIndex] += difference;
  }

  return result;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
751 / (12 + 18 + 13) = 17.4651
12 * 17.4651 = 209.58
18 * 17.4651 = 314.37
13 * 17.4651 = 227.05
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы