<?php
500 => 10,
1000 => 9,
100 => 3,
5000 =>5,
);
$requiredSum = 16900;
echo "Сумма: $requiredSum. \n";
$cash = 0; // Здесь будем сохранять текущую сумму выдаваемых купюр;
$banknotes = array(); // Здесь все используемые купюры
$limit = 0; //всего денег в банкомате
/* Здесь сохраняем номиналы купюр, которых могло не хватить.
Это может потребоваться, а может и нет */
$err = "Выдача невозможна";
foreach ($bills as $bill => $qty) {
$limit += $bill*$qty;
}
if ( $limit < $requiredSum ) {
echo "$err: в банкомате не достаточно средств. \n";
}
if ( $requiredSum && ($requiredSum%100) ) {
echo "$err: введите сумму, кратную 100, 500, 1000 или 5000. \n";
}
if ( $requiredSum <= 0 ) {
echo "$err: минимальная сумма выдачи - 100 (сто) рублей. \n";
}
/*
We may need to sort $bills array in order make sure
that itarations will start from the biggest key. That's how
we can get as many higher-value banknotes as possible and
by that minimize overall amount of bills.
*/
uksort($bills, "compareBills");
foreach ($bills as $bill => $qty) {
$capacity = floor(($requiredSum - $cash)/$bill); if ( ($capacity != 0) && (($requiredSum - $cash)!= 0) && $qty != 0 ) {
$amount = min($capacity, $qty); $cash += $amount * $bill;
$banknotes[$bill] = $amount;
if ($capacity > $qty) {
$lackingNotes[] = $bill;
}
}
}
if ($requiredSum != $cash) {
$which = end($lackingNotes); echo "$err: не достаточно купюр номиналом $which. \n";
}
echo "Выдача возможна, число купюр:\n";
foreach ($banknotes as $bill => $qty) {
echo "{$qty}x{$bill} ";
}
echo "\n";
/*Функция для сортировки */
function compareBills ($a, $b) {
if ( $a==$b) {
return 0;
}
return ($a>$b) ? -1 : 1;
}
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7Cm1iX2ludGVybmFsX2VuY29kaW5nKCd1dGYtOCcpOwoKJGJpbGxzID0gYXJyYXkgKAoJICAgICAgICAgICAgNTAwID0+IDEwLAoJICAgICAgICAgICAgMTAwMCA9PiA5LAoJICAgICAgICAgICAgMTAwID0+IDMsCgkgICAgICAgICAgICA1MDAwID0+NSwKCSAgICAgICAgICAgICk7CiRyZXF1aXJlZFN1bSA9IDE2OTAwOwoKZWNobyAi0KHRg9C80LzQsDogJHJlcXVpcmVkU3VtLiBcbiI7CgokY2FzaCA9IDA7IC8vINCX0LTQtdGB0Ywg0LHRg9C00LXQvCDRgdC+0YXRgNCw0L3Rj9GC0Ywg0YLQtdC60YPRidGD0Y4g0YHRg9C80LzRgyDQstGL0LTQsNCy0LDQtdC80YvRhSDQutGD0L/RjtGAOwoKJGJhbmtub3RlcyA9IGFycmF5KCk7IC8vINCX0LTQtdGB0Ywg0LLRgdC1INC40YHQv9C+0LvRjNC30YPQtdC80YvQtSDQutGD0L/RjtGA0YsKCiRsaW1pdCA9IDA7IC8v0LLRgdC10LPQviDQtNC10L3QtdCzINCyINCx0LDQvdC60L7QvNCw0YLQtQoKLyog0JfQtNC10YHRjCDRgdC+0YXRgNCw0L3Rj9C10Lwg0L3QvtC80LjQvdCw0LvRiyDQutGD0L/RjtGALCDQutC+0YLQvtGA0YvRhSDQvNC+0LPQu9C+INC90LUg0YXQstCw0YLQuNGC0YwuIAogICDQrdGC0L4g0LzQvtC20LXRgiDQv9C+0YLRgNC10LHQvtCy0LDRgtGM0YHRjywg0LAg0LzQvtC20LXRgiDQuCDQvdC10YIgKi8KJGxhY2tpbmdOb3RlcyA9IGFycmF5KCk7IAoKJGVyciA9ICLQktGL0LTQsNGH0LAg0L3QtdCy0L7Qt9C80L7QttC90LAiOwpmb3JlYWNoICgkYmlsbHMgYXMgJGJpbGwgPT4gJHF0eSkgewoJJGxpbWl0ICs9ICRiaWxsKiRxdHk7Cn0KCmlmICggJGxpbWl0IDwgJHJlcXVpcmVkU3VtICkgewoJZWNobyAiJGVycjog0LIg0LHQsNC90LrQvtC80LDRgtC1INC90LUg0LTQvtGB0YLQsNGC0L7Rh9C90L4g0YHRgNC10LTRgdGC0LIuIFxuIjsKCWV4aXQ7Cn0KaWYgKCAkcmVxdWlyZWRTdW0gJiYgKCRyZXF1aXJlZFN1bSUxMDApICkgewoJZWNobyAiJGVycjog0LLQstC10LTQuNGC0LUg0YHRg9C80LzRgywg0LrRgNCw0YLQvdGD0Y4gMTAwLCA1MDAsIDEwMDAg0LjQu9C4IDUwMDAuIFxuIjsKCWV4aXQ7Cn0KaWYgKCAkcmVxdWlyZWRTdW0gPD0gMCApIHsKCWVjaG8gIiRlcnI6INC80LjQvdC40LzQsNC70YzQvdCw0Y8g0YHRg9C80LzQsCDQstGL0LTQsNGH0LggLSAxMDAgKNGB0YLQvikg0YDRg9Cx0LvQtdC5LiBcbiI7CglleGl0Owp9Ci8qIApXZSBtYXkgbmVlZCB0byBzb3J0ICRiaWxscyBhcnJheSBpbiBvcmRlciBtYWtlIHN1cmUKdGhhdCBpdGFyYXRpb25zIHdpbGwgc3RhcnQgZnJvbSB0aGUgYmlnZ2VzdCBrZXkuIFRoYXQncyBob3cgCndlIGNhbiBnZXQgYXMgbWFueSBoaWdoZXItdmFsdWUgYmFua25vdGVzIGFzIHBvc3NpYmxlIGFuZCAKYnkgdGhhdCBtaW5pbWl6ZSBvdmVyYWxsIGFtb3VudCBvZiBiaWxscy4gCiovCnVrc29ydCgkYmlsbHMsICJjb21wYXJlQmlsbHMiKTsgCgpmb3JlYWNoICgkYmlsbHMgYXMgJGJpbGwgPT4gJHF0eSkgewoJJGNhcGFjaXR5ID0gZmxvb3IoKCRyZXF1aXJlZFN1bSAtICRjYXNoKS8kYmlsbCk7IAoJaWYgKCAoJGNhcGFjaXR5ICE9IDApICYmICgoJHJlcXVpcmVkU3VtIC0gJGNhc2gpIT0gMCkgJiYgJHF0eSAhPSAwICkgewoJCSRhbW91bnQgPSBtaW4oJGNhcGFjaXR5LCAkcXR5KTsKCQkkY2FzaCArPSAkYW1vdW50ICogJGJpbGw7CgkJJGJhbmtub3Rlc1skYmlsbF0gPSAkYW1vdW50OwogICAgICAgIGlmICgkY2FwYWNpdHkgPiAkcXR5KSB7CiAgICAgICAgCSRsYWNraW5nTm90ZXNbXSA9ICRiaWxsOwogICAgICAgIH0KCX0KfQoKaWYgKCRyZXF1aXJlZFN1bSAhPSAkY2FzaCkgewoJJHdoaWNoID0gZW5kKCRsYWNraW5nTm90ZXMpOwoJZWNobyAiJGVycjog0L3QtSDQtNC+0YHRgtCw0YLQvtGH0L3QviDQutGD0L/RjtGAINC90L7QvNC40L3QsNC70L7QvCAkd2hpY2guIFxuIjsKCWV4aXQ7Cn0KZWNobyAi0JLRi9C00LDRh9CwINCy0L7Qt9C80L7QttC90LAsINGH0LjRgdC70L4g0LrRg9C/0Y7RgDpcbiI7CmZvcmVhY2ggKCRiYW5rbm90ZXMgYXMgJGJpbGwgPT4gJHF0eSkgewoJZWNobyAieyRxdHl9eHskYmlsbH0gIjsKfQplY2hvICJcbiI7CgovKtCk0YPQvdC60YbQuNGPINC00LvRjyDRgdC+0YDRgtC40YDQvtCy0LrQuCAqLwpmdW5jdGlvbiBjb21wYXJlQmlsbHMgKCRhLCAkYikgewoJaWYgKCAkYT09JGIpIHsKCQlyZXR1cm4gMDsKCX0KCXJldHVybiAoJGE+JGIpID8gLTEgOiAxOwp9