fork(2) download
  1. <?php
  2. //массив с доступным кол-вом купюр и массив с подсчетом выданного количества купюр
  3. $bills = array(5000 => 5, 2000 => 1, 1000 => 2, 500 => 2, 200 => 2, 100 => 1);
  4. $givenBillsCount = array(5000 => 0, 2000 => 0, 1000 => 0, 500 => 0, 200 => 0, 100 => 0);
  5.  
  6. $neededAmount = 29600; //хотим получить эту сумму
  7. $givenAmount = 0; //выданная сумма
  8.  
  9. for ($i=0; $givenAmount < $neededAmount; $i++) {
  10.  
  11. $theRest = $neededAmount - $givenAmount;
  12. //в зависимости от выполнения условий, выберется нужная доступная купюра
  13. if ($neededAmount >= 5000 && $theRest >= 5000 && $bills[5000] != 0) {
  14. $availableBill = 5000;
  15. $givenBillsCount[5000]++;
  16. } elseif ($neededAmount >= 2000 && $theRest >= 2000 && $bills[2000] != 0) {
  17. $availableBill = 2000;
  18. $givenBillsCount[2000]++;
  19. } elseif ($neededAmount >= 1000 && $theRest >= 1000 && $bills[1000] != 0) {
  20. $availableBill = 1000;
  21. $givenBillsCount[1000]++;
  22. } elseif ($neededAmount >= 500 && $theRest >= 500 && $bills[500] != 0) {
  23. $availableBill = 500;
  24. $givenBillsCount[500]++;
  25. } elseif ($neededAmount >= 200 && $theRest >= 200 && $bills[200] != 0) {
  26. $availableBill = 200;
  27. $givenBillsCount[200]++;
  28. } elseif ($neededAmount >= 100 && $theRest >= 100 && $bills[100] != 0) {
  29. $availableBill = 100;
  30. $givenBillsCount[100]++;
  31. } else { //в случае, если из доступных купюр не осталось ничего, а необходимая сумма все ещё не была выдана
  32. echo "Сумма: {$neededAmount}\n";
  33. echo "Выдача невозможна: в банкомате не хватает суммы ({$theRest}), попробуйте вывести сумму {$givenAmount} или меньше";
  34. break;
  35. }
  36.  
  37. $givenAmount += $availableBill; //прибавляем нашу купюру к сумме, которую мы уже выдали
  38. $bills[$availableBill] = $bills[$availableBill] - 1; /*уменьшаем количество доступных
  39.   купюр выбранного номинала на 1*/
  40. if ($neededAmount == $givenAmount) {
  41.  
  42. echo "Выдача возможна, количество купюр:\n"; //успех
  43.  
  44. foreach ($givenBillsCount as $value => $amount) {
  45.  
  46. if ($givenBillsCount[$value] == 0) {
  47. unset($givenBillsCount[$value]);
  48. } else {
  49. echo "{$amount}x{$value} ";
  50. }
  51. }
  52. break;
  53. }
  54. }
  55.  
  56. ?>
Success #stdin #stdout 0.02s 24464KB
stdin
Standard input is empty
stdout
Выдача возможна, количество купюр:
5x5000 1x2000 2x1000 1x500 1x100