fork download
  1. <?php
  2.  
  3.  
  4. /* требуемая сумма */
  5. $amount = 54500;
  6.  
  7. $bills = array(
  8. 100 => 23,
  9. 500 => 5,
  10. 1000 => 0,
  11. 5000 => 200
  12. );
  13.  
  14. function foo($amount, $bills) {
  15. $result = "";
  16. //переворачиваем массив, начинаем проверку с наибольшего наминала.
  17. $rev = array_reverse($bills, true);
  18. var_dump ($rev);
  19. foreach ($rev as $key => $value) {
  20. //находим количество купюр текущего наминала в текущем числе
  21. $countMoney = floor($amount / $key);
  22. echo "Количество купюр наминалом {$key} в числе {$amount}: {$countMoney} \n";
  23. echo "Количество купюр наминалом {$key} в банкомате {$value} \n";
  24. //если количество купюр в числе больше чем в банкомате
  25. if ($countMoney > $value){
  26. //присваиваем максимальное количество купюр из банкомата
  27. $countMoney = $value;
  28. }
  29. //обновляем число (новое значение = текущее значение - текущее кол-во купюр * текущий наминал)
  30. $amount -= $countMoney * $key;
  31. $result = $result . " {$countMoney} x {$key}";
  32. echo "Число после выдаче всех возможных купюр наминалом {$key}: {$amount} \n";
  33. echo "\n";
  34. }
  35.  
  36. return $result;
  37. }
  38.  
  39. echo "Сумма {$amount} \n Выдача возможна, число купюр \n ";
  40. echo foo($amount, $bills);
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
Сумма 54500 
 Выдача возможна, число купюр 
 array(4) {
  [5000]=>
  int(200)
  [1000]=>
  int(0)
  [500]=>
  int(5)
  [100]=>
  int(23)
}
Количество купюр наминалом 5000 в числе 54500: 10 
Количество купюр наминалом 5000 в банкомате 200 
Число после выдаче всех возможных купюр наминалом 5000: 4500 

Количество купюр наминалом 1000 в числе 4500: 4 
Количество купюр наминалом 1000 в банкомате 0 
Число после выдаче всех возможных купюр наминалом 1000: 4500 

Количество купюр наминалом 500 в числе 4500: 9 
Количество купюр наминалом 500 в банкомате 5 
Число после выдаче всех возможных купюр наминалом 500: 2000 

Количество купюр наминалом 100 в числе 2000: 20 
Количество купюр наминалом 100 в банкомате 23 
Число после выдаче всех возможных купюр наминалом 100: 0 

 10 x 5000 0 x 1000 5 x 500 20 x 100