<?php
error_reporting(-1);
$amount = 54100;	//Общая сумма
$result = '';		//Расчет купюр
$canReceive = 0;	//Количество денег, которое сможет получить человек, в случае недостатка купюр
$bills = array(
	100		=> 23,
	500 	=> 5,
	1000 	=> 0,
	5000 	=> 200
);
// Сортировка купюр по убыванию
krsort($bills); 

//Удаляем купюры количество которых равно 0
foreach ($bills as $note => $quantity) {
	if ($quantity == 0){
		unset($bills[$note]); 
	}
}

//Проверка на возможные ошибки
if ($amount % 100 != 0) {
	echo "Выдача не возможна: Сумма не кратна 100";
	exit();
} elseif ($amount < 0) {
	echo "Выдача не возможна: Сумма меньше 0";
	exit();
} elseif ($bills == []) {
	echo "В банкомате нет денег";
	exit();
}


foreach ($bills as $note => $quantity) {
	//если общая сумма больше купюры с текущим номиналом 
	if ($note < $amount) {			
	//считаем, сколько можем взять купюр с таким номиналом								
		$preCount = floor($amount/$note);	
	//учитываем количество таких купюр в банкомате						
		$count = ($preCount < $quantity) ? $preCount : $quantity;	
	//количество денег сможем получить
		$canReceive += $note * $count;								
		$amount -= $note * $count;									
		$result .= "$count x $note ";								
	}
}

//если купюр хватает, то $amount = 0, если же нет, то $amount > 0
if ($amount == 0) {
	echo "Выдача возможна, число купюр:\n$result";
} elseif ($amount > 0) {
	echo "Выдача невозможна, недостаточно купюр в банкомате.\nВозможно получить $canReceive";
}