fork download
  1. <?php
  2.  
  3.  
  4. /* Требуемая сумма */
  5. $amount = 6600;
  6.  
  7. /* Запас наличных */
  8. $bills = array(
  9. 5000,
  10. 2000,
  11. 500,
  12. 200
  13. );
  14.  
  15. $billsCount = array(
  16. 1,
  17. 4,
  18. 1,
  19. 3
  20. );
  21.  
  22. $nominalsCount = count($bills);
  23.  
  24. for ($i = 0; $i < $nominalsCount; $i++) {
  25.  
  26. $j = 0;
  27. $billsCounter = $billsCount;
  28. $sum = $bills[$i];
  29. $billsCounter[$i]--;
  30.  
  31. echo "================\n";
  32. echo "Итерация {$i}\n\nсумма:$sum\n";
  33.  
  34. while ($sum < $amount) {
  35. if ($sum + $bills[$j] <= $amount && $billsCounter[$j] > 0) {
  36. $sum += $bills[$j];
  37. $billsCounter[$j]--;
  38. echo "+ номинал: $bills[$j]\n";
  39. echo "сумма: $sum\n\n";
  40. } else {
  41. $j++;
  42. if ($j > $nominalsCount - 1) {
  43. break;
  44. }
  45. }
  46. }
  47. if ($sum != $amount) {
  48. echo "Невозможно выдать\n";
  49. }
  50. }
  51.  
  52. ?>
  53.  
  54.  
  55.  
Success #stdin #stdout 0.02s 24316KB
stdin
Standard input is empty
stdout
================
Итерация 0

сумма:5000
+ номинал: 500
сумма: 5500

+ номинал: 200
сумма: 5700

+ номинал: 200
сумма: 5900

+ номинал: 200
сумма: 6100

Невозможно выдать
================
Итерация 1

сумма:2000
+ номинал: 2000
сумма: 4000

+ номинал: 2000
сумма: 6000

+ номинал: 500
сумма: 6500

Невозможно выдать
================
Итерация 2

сумма:500
+ номинал: 5000
сумма: 5500

+ номинал: 200
сумма: 5700

+ номинал: 200
сумма: 5900

+ номинал: 200
сумма: 6100

Невозможно выдать
================
Итерация 3

сумма:200
+ номинал: 5000
сумма: 5200

+ номинал: 500
сумма: 5700

+ номинал: 200
сумма: 5900

+ номинал: 200
сумма: 6100

Невозможно выдать