<?php

error_reporting(-1);

/* Требуемая сумма */
$amount = 54500;

/* Запас наличных */
$bills = array(
    100   =>  23,
    500   =>  5,
    1000  =>  0,
    5000  => 200
);

$err = "Выдача невозможна: ";

echo "Сумма: {$amount}\n";
if($amount<0){
    exit($err."сумма меньше нуля.");
}
if(is_float($amount/100)){
    exit($err."сумма не кратна 100.");
}

foreach(array_reverse($bills,true) as $key => $value) {
    $count = floor($amount/$key);
    if($value>0 && $amount>0){
        if($count>$value)$count=$value;
        $result[$key]=$count;
        $amount=$amount-$key*$count;
    }else{
        continue;
    }
}
if($amount>0)exit($err."в бакномате недостаточно купюр.");

echo "Выдача возможна, число купюр:\n";
foreach($result as $key => $value){
    echo "{$key}x$value ";
}
