3v4l.org

run code in 300+ PHP versions simultaneously
<?php function getBillsCountInMoneyAmount(int $moneyAmount, int $bill): int { $divisionRemain = $moneyAmount % $bill; if ($moneyAmount === $divisionRemain) { return 0; } return ($moneyAmount - $divisionRemain) / $bill; } function getDisposableBillsCount(int $bill, int $billsCount, array $billsInStock): int { $countInStock = 0; if (array_key_exists($bill, $billsInStock)) { $countInStock = $billsInStock[$bill]; } return min($billsCount, $countInStock); } function dispenseMoney(int $requestedMoney, array $billsInStock): array { $remainedToDispenseMoney = $requestedMoney; $result = []; foreach($billsInStock as $bill => $countInStock) { $billsCount = getBillsCountInMoneyAmount($remainedToDispenseMoney, $bill); $disposableBillsCount = getDisposableBillsCount($bill, $billsCount, $billsInStock); $result[$bill] = $disposableBillsCount; $remainedToDispenseMoney -= $disposableBillsCount * $bill; } if (0 < $remainedToDispenseMoney) { throw new Exception('Недостаточно купюр'); } return $result; } $billsInStock = [5000 => 3, 2000 => 4, 1000 => 10, 500 => 30, 200 => 10, 100 => 30]; $requestedMoney = 11600; var_dump(dispenseMoney($requestedMoney, $billsInStock));
Output for 8.0.1 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.13
array(6) { [5000]=> int(2) [2000]=> int(0) [1000]=> int(1) [500]=> int(1) [200]=> int(0) [100]=> int(1) }

preferences:
90.06 ms | 407 KiB | 5 Q