<?php
error_reporting(-1);

//tools

function doDivision($x,$divident){
    return intval(floor($divident / $x));
}

$errorArray=array(
	0=>"Выдача невозможна: в банкомате недостаточно купюр\n",
	1=>"Выдача невозможна: сумма меньше нуля\n",
	2=>"Выдача невозможна: сумма не кратна 100\n"
	);

$new=[];

$allowed=array(
    '5000'=>200,
    '2000'=>3,
    '1000'=>1,
    '500'=>5,
    '200'=>3,
    '100'=>23
);

$divident=6600;

//checks

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

if ($divident % 100 !==0) {
    echo "{$errorArray[2]}";
    exit();
}
elseif ($divident <= 0) {
    echo "{$errorArray[1]}";
    exit();
}

//core

foreach ($allowed as $key=>$value) {
    if (intval($key) <= $divident) {
        
        $new[$key] = doDivision(intval($key),$divident);
      
        if ($new[$key]>$allowed[$key]) {
        	$new[$key]=$allowed[$key];
        }
        
        $divident=$divident- ($new[$key]*intval($key));
       
    }
}

//after loop, if divident > 0 it means no sufficient banknotes

if ($divident > 0) {
    echo "{$errorArray[0]}";
    exit();
}

//all green

$string="";

foreach ($new as $key=>$value) {
    $string .= $value!=0?"{$value} x {$key} ":NULL;
}

echo "Выдача возможна, число купюр:\n{$string}";

?>