fork download
  1. <?php
  2.  
  3. //Банкомат
  4.  
  5. //требуемая сумма
  6. $amount = 1100;
  7. $errorMsg = "Выдача невозможна: ";
  8. $successMsg = "Выдача возможна, число купюр:\n";
  9. //запас наличных
  10. $bills = [
  11. 100 => 23,
  12. 500 => 5,
  13. 1000 => 0,
  14. 5000 => 20
  15. ];
  16.  
  17. echo "Сумма: {$amount}\n";
  18.  
  19. krsort($bills);
  20.  
  21. if ($amount < 0) {
  22. echo $errorMsg . "Сумма меньше 0";
  23. exit();
  24. }
  25. if ($amount % 100 != 0) {
  26. echo $errorMsg . "Сумма не кратна 100";
  27. exit();
  28. }
  29.  
  30. $cash = [];
  31.  
  32. function countBills($amount, $denomination, $billsInATM)
  33. {
  34. $billsRequired = floor($amount / $denomination);
  35. if ($billsRequired <= $billsInATM) {
  36. return $billsRequired;
  37. } else {
  38. return $billsInATM;
  39. }
  40. }
  41.  
  42. foreach ($bills as $key => $value) {
  43. $bill = countBills($amount, $key, $value);
  44. if ($bill > 0) {
  45. $cash[$key] = $bill;
  46. $amount = $amount - ($bill * $key);
  47. }
  48. }
  49.  
  50. if ($amount != 0) {
  51. echo $errorMsg . "В банкомате недостаточно купюр";
  52. exit();
  53. }
  54.  
  55. foreach ($cash as $key => $value) {
  56. $successMsg .= "{$value}x{$key} ";
  57. }
  58.  
  59. echo $successMsg;
Success #stdin #stdout 0s 52488KB
stdin
Standard input is empty
stdout
Сумма: 1100
Выдача возможна, число купюр:
2x500 1x100