<?php

error_reporting(-1);

/* требуемая сумма */
$amount = 6600;
echo "Сумма: {$amount} \n";

$bills = array(
    100 => 30,
    500 => 10,
    1000 => 1,
    5000 => 20
    // 200 => 3,
    // 2000 => 4
);

function payOut($amount, $bills) {
    //проверяем на кратность
    if ($amount % 100 != 0) {
        echo "Выдача невозможна: сумма должна быть кратной 100";
        exit;
    }

    $result = "";
    //сортируем массив по ключу по убыванию
    //для правльной работы алгоритма при добавлении номинала 200 и 2000
    //необходимо использовать сортировку по убыванию по значению arsort();
    krsort($bills);
    var_dump($bills);

    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 "Выдача невозможна: недостаточно средств.";
        exit;
    } else {
        echo "Выдача возможна, число купюр: \n";
    }

    return $result;
}


echo payOut($amount, $bills);