fork(1) download
  1. <?php
  2.  
  3. //tools
  4.  
  5. function doDivision($x,$divident){
  6. return intval(floor($divident / $x));
  7. }
  8.  
  9. $errorArray=array(
  10. 0=>"Выдача невозможна: в банкомате недостаточно купюр\n",
  11. 1=>"Выдача невозможна: сумма меньше нуля\n",
  12. 2=>"Выдача невозможна: сумма не кратна 100\n"
  13. );
  14.  
  15. $new=[];
  16.  
  17. $allowed=array(
  18. '5000'=>200,
  19. '2000'=>3,
  20. '1000'=>1,
  21. '500'=>5,
  22. '200'=>3,
  23. '100'=>23
  24. );
  25.  
  26. $divident=6600;
  27.  
  28. //checks
  29.  
  30. echo "Сумма: {$divident}\n";
  31.  
  32. if ($divident % 100 !==0) {
  33. echo "{$errorArray[2]}";
  34. exit();
  35. }
  36. elseif ($divident <= 0) {
  37. echo "{$errorArray[1]}";
  38. exit();
  39. }
  40.  
  41. //core
  42.  
  43. foreach ($allowed as $key=>$value) {
  44. if (intval($key) <= $divident) {
  45.  
  46. $new[$key] = doDivision(intval($key),$divident);
  47.  
  48. if ($new[$key]>$allowed[$key]) {
  49. $new[$key]=$allowed[$key];
  50. }
  51.  
  52. $divident=$divident- ($new[$key]*intval($key));
  53.  
  54. }
  55. }
  56.  
  57. //after loop, if divident > 0 it means no sufficient banknotes
  58.  
  59. if ($divident > 0) {
  60. echo "{$errorArray[0]}";
  61. exit();
  62. }
  63.  
  64. //all green
  65.  
  66. $string="";
  67.  
  68. foreach ($new as $key=>$value) {
  69. $string .= $value!=0?"{$value} x {$key} ":NULL;
  70. }
  71.  
  72. echo "Выдача возможна, число купюр:\n{$string}";
  73.  
  74. ?>
Success #stdin #stdout 0.01s 82560KB
stdin
Standard input is empty
stdout
Сумма: 6600
Выдача возможна, число купюр:
1 x 5000 1 x 1000 1 x 500 1 x 100