//Выдасть сдачу, если возможно. В банкомате есть определённый запас купюр, номиналом: 100, 500, 1000, 5000
//Нужно использовать наименьшее число купюр.
<?php
function examination
(int
$usersMoney, array $moneyATM) : bool
{//Проверяет, может ли банкомат выдасть купюры, и если не может, выводит причину
if ($usersMoney % 100 != 0){
echo "Выдача невозможна: введённая сумма $usersMoney не кратна 100.";
return false;
}
if(!checkATM($moneyATM)){
echo "Выдача невозможна: в банкомате нет денег.";
return false;
}
if(!checkSum($moneyATM, $usersMoney)){
echo "Выдача невозможна: в банкомате недостаточно денег.";
return false;
}
if($usersMoney <= 0){
echo "Выдача невозможна: введённая сумма меньше или равна 0.";
return false;
}
return true;
}
function integer(int $usersMoney, int $divider, int $factor) : int
{//Возвращает максимальное число купюр
return intval(floor($usersMoney / $divider)) * $factor; }
function currency
(int
$usersMoney, array $moneyATM) : array {//Считает необходимое количество купюр
$paper = [
100 => 0,
500 => 0,
1000 => 0,
5000 => 0
];
for($i = 3; $i >= 0; $i--){//Проверяет, есть ли в банкомате нужные купюры
$paper[$keys[$i]] = integer($usersMoney, $keys[$i], 1);
if($moneyATM[$keys[$i]] >= $paper[$keys[$i]]){
$usersMoney -= integer($usersMoney, $keys[$i], $keys[$i]);
} elseif($moneyATM[$keys[$i]] != 0){
$usersMoney -= $moneyATM[$keys[$i]] * $keys[$i];
$paper[$keys[$i]] = $moneyATM[$keys[$i]];
} else{
$paper[$keys[$i]] = 0;
}
}
return $paper;
}
function checkATM
(array $moneyATM) : bool
{//Проверяет, есть ли купюры в банкомате
$i = 0;
foreach ($moneyATM as $money) {
if ($money == 0) {
$i++;
}
}
return $i != 4 ? true : false;
}
function checkSum
(array $moneyATM, float
$sum) : bool
{//Больше ли введённая сумма, чем есть денег в банкомате
$sumInATM = 0;
foreach ($moneyATM as $currency => $amount) {
$sumInATM += $currency * $amount;
}
return (($sumInATM - $sum) >= 0) ? true : false;
}
$usersMoney = 11000;
$moneyATM = [
100 => 5,
500 => 3,
1000 => 4,
5000 => 1
];
if (examination($usersMoney, $moneyATM)) {
$result = currency($usersMoney, $moneyATM);
foreach ($result as $currency => $amount) {
echo $currency . " => " . $amount . "\n";
}
}
?>
Ly/QktGL0LTQsNGB0YLRjCDRgdC00LDRh9GDLCDQtdGB0LvQuCDQstC+0LfQvNC+0LbQvdC+LiDQkiDQsdCw0L3QutC+0LzQsNGC0LUg0LXRgdGC0Ywg0L7Qv9GA0LXQtNC10LvRkdC90L3Ri9C5INC30LDQv9Cw0YEg0LrRg9C/0Y7RgCwg0L3QvtC80LjQvdCw0LvQvtC8OiAxMDAsIDUwMCwgMTAwMCwgNTAwMAovL9Cd0YPQttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC90LDQuNC80LXQvdGM0YjQtdC1INGH0LjRgdC70L4g0LrRg9C/0Y7RgC4KPD9waHAKZnVuY3Rpb24gZXhhbWluYXRpb24gKGludCAkdXNlcnNNb25leSwgYXJyYXkgJG1vbmV5QVRNKSA6IGJvb2wKey8v0J/RgNC+0LLQtdGA0Y/QtdGCLCDQvNC+0LbQtdGCINC70Lgg0LHQsNC90LrQvtC80LDRgiDQstGL0LTQsNGB0YLRjCDQutGD0L/RjtGA0YssINC4INC10YHQu9C4INC90LUg0LzQvtC20LXRgiwg0LLRi9Cy0L7QtNC40YIg0L/RgNC40YfQuNC90YMKICAgIGlmICgkdXNlcnNNb25leSAlIDEwMCAhPSAwKXsKICAgICAgICBlY2hvICLQktGL0LTQsNGH0LAg0L3QtdCy0L7Qt9C80L7QttC90LA6INCy0LLQtdC00ZHQvdC90LDRjyDRgdGD0LzQvNCwICR1c2Vyc01vbmV5INC90LUg0LrRgNCw0YLQvdCwIDEwMC4iOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmKCFjaGVja0FUTSgkbW9uZXlBVE0pKXsKICAgICAgICBlY2hvICLQktGL0LTQsNGH0LAg0L3QtdCy0L7Qt9C80L7QttC90LA6INCyINCx0LDQvdC60L7QvNCw0YLQtSDQvdC10YIg0LTQtdC90LXQsy4iOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmKCFjaGVja1N1bSgkbW9uZXlBVE0sICR1c2Vyc01vbmV5KSl7CiAgICAgICAgZWNobyAi0JLRi9C00LDRh9CwINC90LXQstC+0LfQvNC+0LbQvdCwOiDQsiDQsdCw0L3QutC+0LzQsNGC0LUg0L3QtdC00L7RgdGC0LDRgtC+0YfQvdC+INC00LXQvdC10LMuIjsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZigkdXNlcnNNb25leSA8PSAwKXsKICAgICAgICBlY2hvICLQktGL0LTQsNGH0LAg0L3QtdCy0L7Qt9C80L7QttC90LA6INCy0LLQtdC00ZHQvdC90LDRjyDRgdGD0LzQvNCwINC80LXQvdGM0YjQtSDQuNC70LggINGA0LDQstC90LAgMC4iOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGludGVnZXIoaW50ICR1c2Vyc01vbmV5LCBpbnQgJGRpdmlkZXIsIGludCAkZmFjdG9yKSA6IGludAp7Ly/QktC+0LfQstGA0LDRidCw0LXRgiDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0YfQuNGB0LvQviDQutGD0L/RjtGACiAgICByZXR1cm4gaW50dmFsKGZsb29yKCR1c2Vyc01vbmV5IC8gJGRpdmlkZXIpKSAqICRmYWN0b3I7Cn0KZnVuY3Rpb24gY3VycmVuY3koaW50ICR1c2Vyc01vbmV5LCBhcnJheSAkbW9uZXlBVE0pIDogYXJyYXkKey8v0KHRh9C40YLQsNC10YIg0L3QtdC+0LHRhdC+0LTQuNC80L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQutGD0L/RjtGACiAgICAkcGFwZXIgPSBbCiAgICAgICAgMTAwID0+IDAsCiAgICAgICAgNTAwID0+IDAsCiAgICAgICAgMTAwMCA9PiAwLAogICAgICAgIDUwMDAgPT4gMAogICAgXTsKICAgIGZvcigkaSA9IDM7ICRpID49IDA7ICRpLS0pey8v0J/RgNC+0LLQtdGA0Y/QtdGCLCDQtdGB0YLRjCDQu9C4INCyINCx0LDQvdC60L7QvNCw0YLQtSDQvdGD0LbQvdGL0LUg0LrRg9C/0Y7RgNGLCiAgICAgICAgJGtleXMgPSBhcnJheV9rZXlzKCRwYXBlcik7CiAgICAgICAgJHBhcGVyWyRrZXlzWyRpXV0gPSBpbnRlZ2VyKCR1c2Vyc01vbmV5LCAka2V5c1skaV0sIDEpOwogICAgICAgIGlmKCRtb25leUFUTVska2V5c1skaV1dID49ICRwYXBlclska2V5c1skaV1dKXsKICAgICAgICAgICAgJHVzZXJzTW9uZXkgLT0gaW50ZWdlcigkdXNlcnNNb25leSwgJGtleXNbJGldLCAka2V5c1skaV0pOwogICAgICAgIH0gICBlbHNlaWYoJG1vbmV5QVRNWyRrZXlzWyRpXV0gIT0gMCl7CiAgICAgICAgICAgICR1c2Vyc01vbmV5IC09ICRtb25leUFUTVska2V5c1skaV1dICogJGtleXNbJGldOwogICAgICAgICAgICAkcGFwZXJbJGtleXNbJGldXSA9ICRtb25leUFUTVska2V5c1skaV1dOwogICAgICAgIH0gICBlbHNlewogICAgICAgICAgICAkcGFwZXJbJGtleXNbJGldXSA9IDA7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRwYXBlcjsKfQoKZnVuY3Rpb24gY2hlY2tBVE0oYXJyYXkgJG1vbmV5QVRNKSA6IGJvb2wKey8v0J/RgNC+0LLQtdGA0Y/QtdGCLCDQtdGB0YLRjCDQu9C4INC60YPQv9GO0YDRiyDQsiDQsdCw0L3QutC+0LzQsNGC0LUKICAgICRpID0gMDsKICAgIGZvcmVhY2ggKCRtb25leUFUTSBhcyAkbW9uZXkpIHsKICAgICAgICBpZiAoJG1vbmV5ID09IDApIHsKICAgICAgICAgICAgJGkrKzsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gJGkgIT0gNCA/IHRydWUgOiBmYWxzZTsKfQoKZnVuY3Rpb24gY2hlY2tTdW0oYXJyYXkgJG1vbmV5QVRNLCBmbG9hdCAkc3VtKSA6IGJvb2wKey8v0JHQvtC70YzRiNC1INC70Lgg0LLQstC10LTRkdC90L3QsNGPINGB0YPQvNC80LAsINGH0LXQvCDQtdGB0YLRjCDQtNC10L3QtdCzINCyINCx0LDQvdC60L7QvNCw0YLQtQogICAgJHN1bUluQVRNID0gMDsKICAgIGZvcmVhY2ggKCRtb25leUFUTSBhcyAkY3VycmVuY3kgPT4gJGFtb3VudCkgewogICAgICAgICRzdW1JbkFUTSArPSAkY3VycmVuY3kgKiAkYW1vdW50OwogICAgfQogICAgcmV0dXJuICgoJHN1bUluQVRNIC0gJHN1bSkgPj0gMCkgPyB0cnVlIDogZmFsc2U7Cn0KCiR1c2Vyc01vbmV5ID0gMTEwMDA7CiRtb25leUFUTSA9IFsKICAgIDEwMCA9PiA1LAogICAgNTAwID0+IDMsCiAgICAxMDAwID0+IDQsCiAgICA1MDAwID0+IDEKXTsKaWYgKGV4YW1pbmF0aW9uKCR1c2Vyc01vbmV5LCAkbW9uZXlBVE0pKSB7CiAgICAkcmVzdWx0ID0gY3VycmVuY3koJHVzZXJzTW9uZXksICRtb25leUFUTSk7CiAgICBmb3JlYWNoICgkcmVzdWx0IGFzICRjdXJyZW5jeSA9PiAkYW1vdW50KSB7CiAgICAgICAgZWNobyAkY3VycmVuY3kgLiAiID0+ICIgLiAkYW1vdW50IC4gIlxuIjsKICAgIH0KfQo/Pg==