<?php
/* требуемая сумма */
$amount = 6600;
echo "Сумма: {$amount} \n";
100 => 30,
500 => 10,
1000 => 1,
5000 => 20
// 200 => 3,
// 2000 => 4
);
function payOut($amount, $bills) {
//проверяем на кратность
if ($amount % 100 != 0) {
echo "Выдача невозможна: сумма должна быть кратной 100";
}
$result = "";
//сортируем массив по ключу по убыванию
//для правльной работы алгоритма при добавлении номинала 200 и 2000
//необходимо использовать сортировку по убыванию по значению arsort();
foreach ($bills as $nominalValue => $quantity) {
//находим количество купюр текущего номинала в текущем сумме
$quantityMoney = floor($amount / $nominalValue); echo "Количество купюр номиналом {$nominalValue} в сумме {$amount}: {$quantityMoney} \n";
echo "Количество купюр номиналом {$nominalValue} в банкомате {$quantity} \n";
//если количество купюр в сумме больше чем в банкомате
if ($quantityMoney > $quantity) {
//присваиваем максимальное количество купюр из банкомата
$quantityMoney = $quantity;
}
//обновляем число (новое значение = текущее значение - текущее кол-во купюр * текущий номинал)
$amount -= $quantityMoney * $nominalValue;
// добавляем в результат только запись со значением
if ($quantity != 0) {
$result = $result . " {$quantityMoney} x {$nominalValue}";
}
echo "Число после выдачи всех возможных купюр номиналом {$nominalValue}: {$amount} \n";
echo "\n";
// если все купюры выданы, завершаем цикл
if ($amount == 0) {
break;
}
}
// Проверяем хватает ли средств в банкомате
if ($amount != 0) {
echo "Выдача невозможна: недостаточно средств.";
} else {
echo "Выдача возможна, число купюр: \n";
}
return $result;
}
echo payOut($amount, $bills);