<?php

//Банкомат
error_reporting(-1);
mb_internal_encoding('utf-8');

//требуемая сумма
$amount = 1100;
$errorMsg = "Выдача невозможна: ";
$successMsg = "Выдача возможна, число купюр:\n";
//запас наличных
$bills = [
    100  => 23,
    500  => 5,
    1000 => 0,
    5000 => 20
];

echo "Сумма: {$amount}\n";

krsort($bills);

if ($amount < 0) {
    echo $errorMsg . "Сумма меньше 0";
    exit();
}
if ($amount % 100 != 0) {
    echo $errorMsg . "Сумма не кратна 100";
    exit();
}

$cash = [];

function countBills($amount, $denomination, $billsInATM)
{
    $billsRequired = floor($amount / $denomination);
    if ($billsRequired <= $billsInATM) {
        return $billsRequired;
    } else {
        return $billsInATM;
    }
}

foreach ($bills as $key => $value) {
    $bill = countBills($amount, $key, $value);
    if ($bill > 0) {
        $cash[$key] = $bill;
        $amount = $amount - ($bill * $key);
    }
}

if ($amount != 0) {
    echo $errorMsg . "В банкомате недостаточно купюр";
    exit();
}

foreach ($cash as $key => $value) {
    $successMsg .= "{$value}x{$key} ";
}

echo $successMsg;