fork download
  1. <?php
  2. //Сколько выдать
  3. $input = 54500;
  4.  
  5. //Купюры в наличии
  6. $bills = array(
  7. 100 => 23,
  8. 500 => 5,
  9. 1000 => 0,
  10. 5000 => 200
  11. );
  12. $bills = array_reverse($bills, true);
  13. //Количество выданных купюр
  14. $issued = array(
  15. 100 => 0,
  16. 500 => 0,
  17. 1000 => 0,
  18. 5000 => 0
  19. );
  20. $money = $input;
  21. $error = '';
  22.  
  23. if ($input < 0) {
  24. $error = 'Сумма меньше нуля';
  25. } elseif (($input % 100) != 0) {
  26. $error = 'Число не кратно ста';
  27. } else {
  28. foreach ($bills as $bill => $count) {
  29. if (($count > 0) && ($money >= $bill)) {
  30. $issued[$bill] = floor($money / $bill);
  31. if ($count > $issued[$bill]) {
  32. $money %= $bill;
  33. } else {
  34. $issued[$bill] = $count;
  35. $money = $money - ($bill * $count);
  36. }
  37. } else {
  38. continue;
  39. }
  40. }
  41.  
  42. if ($money != 0) {
  43. $error = 'Недостаточно купюр';
  44. }
  45.  
  46. $billsCount = '';
  47. $issued = array_reverse($issued, true);
  48. foreach ($issued as $bill => $count) {
  49. if ($count != 0) {
  50. $billsCount .= "{$bill}x{$count} ";
  51. }
  52. }
  53. }
  54.  
  55. echo "Сумма: {$input}\n";
  56. if ($error = '') {
  57. echo "Выдача невозможна: {$error}\n";
  58. } else {
  59. echo "Выдача возможна, число купюр:\n{$billsCount}";
  60. }
  61.  
Success #stdin #stdout 0s 20520KB
stdin
Standard input is empty
stdout
Сумма: 54500
Выдача возможна, число купюр:
5000x10 500x5 100x20