3v4l.org

run code in 300+ PHP versions simultaneously
<?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} "; } } } }
Output for 7.0.0 - 7.0.20, 7.1.0 - 7.1.20, 7.2.6 - 7.2.33, 7.3.16 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.27, 8.2.0 - 8.2.17, 8.3.0 - 8.3.4
Сумма: 54500 Выдача возможна, число купюр: 10x5000 5x500 20x100

preferences:
146.88 ms | 403 KiB | 166 Q