fork download
  1. <?php
  2.  
  3. header('Content-Type: text/plain; charset=UTF-8');
  4.  
  5. $amount = 987800;
  6.  
  7. $bills = array(
  8. 5000 => 120,
  9. 2000 => 64,
  10. 1000 => 360,
  11. 500 => 1500,
  12. 200 => 230,
  13. 100 => 350
  14. );
  15.  
  16. /* Считаем количество денег в банкомате */
  17. function getBillSum($bills)
  18. {
  19. $BillSum = '';
  20.  
  21. foreach ($bills as $billValue => $billAmount) {
  22. $BillSum += $billValue * $billAmount;
  23. }
  24.  
  25. return $BillSum;
  26. }
  27.  
  28. /* Проверяем возможность выдачи */
  29. function checkPaymentPossibility($amount, $bills)
  30. {
  31. $error = '';
  32.  
  33. $billSum = getBillSum($bills);
  34.  
  35. if ($billSum < $amount) {
  36. $error = "в банкомате недостаточно купюр";
  37. }
  38.  
  39. if ($amount <= 0) {
  40. $error = "сумма должна быть больше нуля";
  41. }
  42.  
  43. if (($amount % 100) != 0) {
  44. $error = "сумма должна быть кратна ста";
  45. }
  46.  
  47. if (!empty($error)) {
  48. return "Выдача невозможна: $error";
  49. }
  50.  
  51. return TRUE;
  52. }
  53.  
  54. function giveCash($amount, $bills)
  55. {
  56. $result = '';
  57.  
  58. foreach ($bills as $billValue => $billAmount) {
  59. $billPaymentAmount = floor($amount / $billValue);
  60.  
  61. if ($billPaymentAmount > $billAmount) {
  62. $billPaymentAmount = $billAmount;
  63. }
  64.  
  65. $amount -= $billPaymentAmount * $billValue;
  66.  
  67. $result .= "{$billPaymentAmount}x{$billValue} ";
  68. }
  69.  
  70. return $result;
  71. }
  72.  
  73. function processATMRequest ($amount, $bills)
  74. {
  75. $result = '';
  76.  
  77. $errors = checkPaymentPossibility($amount, $bills);
  78.  
  79. if ($errors !== TRUE) {
  80. return $errors;
  81. }
  82.  
  83. $cash = giveCash($amount, $bills);
  84.  
  85. $result .= "Сумма: $amount\n";
  86. $result .= "Выдача возможна, число купюр: $cash\n";
  87.  
  88. return $result;
  89.  
  90. }
  91.  
  92. echo processATMRequest($amount, $bills);
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
Сумма: 987800
Выдача возможна, число купюр: 120x5000 64x2000 259x1000 1x500 1x200 1x100