<?php

error_reporting(-1);

/*Требуемая сумма*/

$amount=54500;

/*Запас наличных*/

$bills=array(
    100=>23,
    500=>5,
    1000=>0,
    5000=>200
);

$total_sum=0; /*общая сумма */

foreach ($bills as $nominal=>$quantity){
    $total_sum+=($nominal*$quantity);
}

if($total_sum<$amount){
    echo "Выдача невозможна: недостаточно средств в терминале\n";
}
else{

    if($amount%100>0){
        echo "Невозможно выдать данную сумму, нет купюр мельче 100\n";
    }
    else{
        echo "Сумма - $amount \n";

        $quantity_5000=intval($amount/5000);//требуемое количество 5000 купюр
        if($quantity_5000>$bills[5000]){
            $quantity_5000=$bills[5000];
        }
        $amount=$amount-$quantity_5000*5000;

        $quantity_1000=intval($amount/1000);//требуемое количество 1000 купюр
        if($quantity_1000>$bills[1000]){
            $quantity_1000=$bills[1000];
        }
        $amount=$amount-$quantity_1000*1000;

        $quantity_500=intval($amount/500);//требуемое количество 500 купюр
        if($quantity_500>$bills[500]){
            $quantity_500=$bills[500];
        }
        $amount=$amount-$quantity_500*500;

        $quantity_100=intval($amount/100);//требуемое количество 100 купюр
        if($quantity_100>$bills[100]){
            $quantity_100=$bills[100];
        }
        $amount=$amount-$quantity_100*100; //остаток от вычитаний всех возможных произведений номиналов по порядку

        if($amount==0){
            echo "Выдача возможна, число купюр:\n";

            if($quantity_5000!=0){
                echo "{$quantity_5000}x5000 ";
            }
            if($quantity_1000!=0){
                echo "{$quantity_1000}x1000 ";
            }
            if($quantity_500!=0){
                echo "{$quantity_500}x500 ";
            }
            if($quantity_100!=0){
                echo "{$quantity_100}x100 ";
            }
            echo "\n";
        }
        else{
            echo "Недостаточно купюр нужного номинала введите другую сумму\n";
        }
    }
}
