<?php
$amount = 6600;
$bills = [5000, 2000, 500, 200];
$totalBills = [1, 4, 1, 3];
$rndCombination = [0, 0, 0, 0];
function nextCombination($total, $combination, $bills, $amount){
for( ; $n>=0; $n--){
if($combination[$n] < $total[$n]){
$combination[$n] += 1;
break;
} else {
$combination[$n] = 0;
}
}
return $combination;
}
function calculateSum($combination, $bills){
$sum = 0;
foreach($bills as $k => $v){
$sum += $v * $combination[$k];
}
return $sum;
}
function outputCombination($combination, $bills){
$str = "";
foreach($bills as $k => $v){
$str .= "{$v}x{$combination[$k]} ";
}
return $str;
}
$res = nextCombination($totalBills, $rndCombination, $bills, $amount);
$sum = calculateSum($res, $bills, $amount, $totalBills);
function Main($res, $sum, $amount, $totalBills, $bills){
while($res != $totalBills){
if($sum == $amount){
$str = outputCombination($res, $bills);
echo "Сумма: {$amount}\n";
echo "Выдача возможна, число купюр:\n{$str}";
} else {
$res = nextCombination($totalBills, $res, $bills, $amount);
$sum = calculateSum($res, $bills, $amount, $totalBills);
}
}
echo "Выдача невозможна, подходящей комбинации не нашлось.";
}
Main($res, $sum, $amount, $totalBills, $bills);
PD9waHAKIAplcnJvcl9yZXBvcnRpbmcoLTEpOwoKJGFtb3VudCA9IDY2MDA7CiRiaWxscyA9IFs1MDAwLCAyMDAwLCA1MDAsIDIwMF07CiR0b3RhbEJpbGxzID0gWzEsIDQsIDEsIDNdOwokcm5kQ29tYmluYXRpb24gPSBbMCwgMCwgMCwgMF07CiAKZnVuY3Rpb24gbmV4dENvbWJpbmF0aW9uKCR0b3RhbCwgJGNvbWJpbmF0aW9uLCAkYmlsbHMsICRhbW91bnQpewoJJG4gPSBjb3VudCgkdG90YWwpIC0gMTsKCWZvciggOyAkbj49MDsgJG4tLSl7CgkJaWYoJGNvbWJpbmF0aW9uWyRuXSA8ICR0b3RhbFskbl0pewoJCQkkY29tYmluYXRpb25bJG5dICs9IDE7CgkJCWJyZWFrOwoJCX0gZWxzZSB7CgkJCSRjb21iaW5hdGlvblskbl0gPSAwOwoJCX0KCX0KCXJldHVybiAkY29tYmluYXRpb247Cn0KCmZ1bmN0aW9uIGNhbGN1bGF0ZVN1bSgkY29tYmluYXRpb24sICRiaWxscyl7Cgkkc3VtID0gMDsKCWZvcmVhY2goJGJpbGxzIGFzICRrID0+ICR2KXsKCQkkc3VtICs9ICR2ICogJGNvbWJpbmF0aW9uWyRrXTsKCX0KCXJldHVybiAkc3VtOwp9CgpmdW5jdGlvbiBvdXRwdXRDb21iaW5hdGlvbigkY29tYmluYXRpb24sICRiaWxscyl7Cgkkc3RyID0gIiI7Cglmb3JlYWNoKCRiaWxscyBhcyAkayA9PiAkdil7CgkJJHN0ciAuPSAieyR2fXh7JGNvbWJpbmF0aW9uWyRrXX0gIjsKCX0KCXJldHVybiAkc3RyOwp9CgokcmVzID0gbmV4dENvbWJpbmF0aW9uKCR0b3RhbEJpbGxzLCAkcm5kQ29tYmluYXRpb24sICRiaWxscywgJGFtb3VudCk7CiRzdW0gPSBjYWxjdWxhdGVTdW0oJHJlcywgJGJpbGxzLCAkYW1vdW50LCAkdG90YWxCaWxscyk7CgpmdW5jdGlvbiBNYWluKCRyZXMsICRzdW0sICRhbW91bnQsICR0b3RhbEJpbGxzLCAkYmlsbHMpewoJd2hpbGUoJHJlcyAhPSAkdG90YWxCaWxscyl7CgkJaWYoJHN1bSA9PSAkYW1vdW50KXsKCQkJJHN0ciA9IG91dHB1dENvbWJpbmF0aW9uKCRyZXMsICRiaWxscyk7CgkJCWVjaG8gItCh0YPQvNC80LA6IHskYW1vdW50fVxuIjsKCQkJZWNobyAi0JLRi9C00LDRh9CwINCy0L7Qt9C80L7QttC90LAsINGH0LjRgdC70L4g0LrRg9C/0Y7RgDpcbnskc3RyfSI7CgkJCWV4aXQoKTsKCQl9IGVsc2UgewoJCQkkcmVzID0gbmV4dENvbWJpbmF0aW9uKCR0b3RhbEJpbGxzLCAkcmVzLCAkYmlsbHMsICRhbW91bnQpOwoJCQkkc3VtID0gY2FsY3VsYXRlU3VtKCRyZXMsICRiaWxscywgJGFtb3VudCwgJHRvdGFsQmlsbHMpOwoJCX0KCX0KCWVjaG8gItCS0YvQtNCw0YfQsCDQvdC10LLQvtC30LzQvtC20L3QsCwg0L/QvtC00YXQvtC00Y/RidC10Lkg0LrQvtC80LHQuNC90LDRhtC40Lgg0L3QtSDQvdCw0YjQu9C+0YHRjC4iOwp9CgpNYWluKCRyZXMsICRzdW0sICRhbW91bnQsICR0b3RhbEJpbGxzLCAkYmlsbHMpOwo=