fork(6) download
  1. <?php
  2. $amount = 54100; //Общая сумма
  3. $result = ''; //Расчет купюр
  4. $canReceive = 0; //Количество денег, которое сможет получить человек, в случае недостатка купюр
  5. $bills = array(
  6. 100 => 23,
  7. 500 => 5,
  8. 1000 => 0,
  9. 5000 => 200
  10. );
  11. // Сортировка купюр по убыванию
  12. krsort($bills);
  13.  
  14. //Удаляем купюры количество которых равно 0
  15. foreach ($bills as $note => $quantity) {
  16. if ($quantity == 0){
  17. unset($bills[$note]);
  18. }
  19. }
  20.  
  21. //Проверка на возможные ошибки
  22. if ($amount % 100 != 0) {
  23. echo "Выдача не возможна: Сумма не кратна 100";
  24. exit();
  25. } elseif ($amount < 0) {
  26. echo "Выдача не возможна: Сумма меньше 0";
  27. exit();
  28. } elseif ($bills == []) {
  29. echo "В банкомате нет денег";
  30. exit();
  31. }
  32.  
  33.  
  34. foreach ($bills as $note => $quantity) {
  35. //если общая сумма больше купюры с текущим номиналом
  36. if ($note < $amount) {
  37. //считаем, сколько можем взять купюр с таким номиналом
  38. $preCount = floor($amount/$note);
  39. //учитываем количество таких купюр в банкомате
  40. $count = ($preCount < $quantity) ? $preCount : $quantity;
  41. //количество денег сможем получить
  42. $canReceive += $note * $count;
  43. $amount -= $note * $count;
  44. $result .= "$count x $note ";
  45. }
  46. }
  47.  
  48. //если купюр хватает, то $amount = 0, если же нет, то $amount > 0
  49. if ($amount == 0) {
  50. echo "Выдача возможна, число купюр:\n$result";
  51. } elseif ($amount > 0) {
  52. echo "Выдача невозможна, недостаточно купюр в банкомате.\nВозможно получить $canReceive";
  53. }
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
Выдача возможна, число купюр:
10 x 5000 5 x 500 16 x 100