- array_combine: documentation ( source)
- floor: documentation ( source)
- array_flip: documentation ( source)
- error_reporting: documentation ( source)
- mb_internal_encoding: documentation ( source)
<?php
error_reporting(-1);
mb_internal_encoding('UTF-8');
$amount = 54500;
$totalCash = 0;
$bills = array(
5000 => 200,
1000 => 0,
500 => 5,
100 => 23
);
foreach ($bills as $faceValue => $totalNumberOfBills) {
$totalCash += $faceValue * $totalNumberOfBills;
}
echo "Сумма: {$amount}\n";
if ($amount > $totalCash) {
echo "Выдача невозможна: В банкомате отсутствует требуемая сумма.\n";
} elseif ($amount % 100 != 0) {
echo "Выдача невозможна: Запрошена неверная сумма (сумма должна быть кратна 100 рублям).\n";
} elseif ($amount <= 0) {
echo "Выдача невозможна: Запрошена сумма меньше или равна нуля.\n";
} else {
foreach ($bills as $faceValue => $totalNumberOfBills) {
/* Кол-во купюр каждого номинала исходя из запрашиваемой суммы */
$numberOfBills = floor($amount / $faceValue);
/* Проверка наличия требуемого количества купюр в АТМ */
if ($numberOfBills > $totalNumberOfBills) {
$numberOfBills = $totalNumberOfBills;
}
/* Вычитаем сумму нужных купюр и сохраняем кол-во нужных купюр в отдельный массив */
$amount -= $numberOfBills * $faceValue;
$result[] = $numberOfBills;
}
/* Если в итоге сумма не станет равной нулю, значить в АТМ нет купюр нужного номинала */
if ($amount != 0) {
echo "Выдача невозможна: В банкомате отсутствуют купюры нужного номинала.";
} else {
/* Если сумма равна 0, то АТМ выдает нужную сумму */
echo "Выдача возможна, число купюр:\n";
$result = array_combine($result, array_flip($bills));
foreach ($result as $key => $value) {
if ($key != 0) {
echo "{$key}x{$value} ";
}
}
}
}