<?php
//Сколько выдать
$input = 54500;

//Купюры в наличии
$bills = array(
    100 => 23,
    500 => 5,
    1000 => 0,
    5000 => 200
);
$bills = array_reverse($bills, true);
//Количество выданных купюр
$issued = array(
    100 => 0,
    500 => 0,
    1000 => 0,
    5000 => 0
);
$money = $input;
$error = '';

if ($input < 0) {
    $error = 'Сумма меньше нуля';
} elseif (($input % 100) != 0) {
    $error = 'Число не кратно ста';
} else {
    foreach ($bills as $bill => $count) {
        if (($count > 0) && ($money >= $bill)) {
            $issued[$bill] = floor($money / $bill);
            if ($count > $issued[$bill]) {
                $money %= $bill;
            } else {
                $issued[$bill] = $count;
                $money = $money - ($bill * $count);
            }
        } else {
            continue;
        }
    }

    if ($money != 0) {
        $error = 'Недостаточно купюр';
    }

    $billsCount = '';
    $issued = array_reverse($issued, true);
    foreach ($issued as $bill => $count) {
        if ($count != 0) {
            $billsCount .= "{$bill}x{$count} ";
        }
    }
}

echo "Сумма: {$input}\n";
if ($error = '') {
    echo "Выдача невозможна: {$error}\n";
} else {
    echo "Выдача возможна, число купюр:\n{$billsCount}";
}
