<?php $amount = 620; 10 => 5, 50 => 0, 200 => 10, 500 => 10, ); $attempts = 0; function countBillsSum($billsCopy) { $result[$i] = $valuesBillsCopy[$i] * $keysBillsCopy[$i]; } return $result; } function findChange($amount, $keysBills, $bills, $billNumber, $lastAmount) { $x = null; echo "{$debugOffset}enter $billNumber\n"; global $attempts; $currentBill = $keysBills[$billNumber]; if ($billNumber == 3) { echo "сработало"; $lastAmount = $amount; } if ($billNumber !=0) { $lastAmount = $lastAmount - $currentBill*$currentMaxBills; } for ($i = $currentMaxBills; $i >= 0; $i--) { $attempts++; $billsCopy = $bills; $billsCopy[$currentBill] = $i; $res = $i * $currentBill; $sum = countBillsSum($billsCopy); echo "{$debugOffset} i=$i, billNumber = $billNumber,lastAmount = $lastAmount, bills ".implode(", ", $billsCopy).", sum=$sum\n"; if ($billNumber > 0) { findChange($amount, $keysBills, $billsCopy, $billNumber - 1, $lastAmount); if ($x) { return $x; } } elseif ($res == $lastAmount) { return $x; } } } echo findChange($amount, $keysBills, $bills, 3, $amount); echo "\n".$attempts;
Standard input is empty
enter 3
сработало i=1, billNumber = 3,lastAmount = 120, bills 5, 0, 10, 1, sum=2550
enter 2
i=0, billNumber = 2,lastAmount = 120, bills 5, 0, 0, 1, sum=550
enter 1
i=0, billNumber = 1,lastAmount = 120, bills 5, 0, 0, 1, sum=550
enter 0
i=5, billNumber = 0,lastAmount = 120, bills 5, 0, 0, 1, sum=550
i=4, billNumber = 0,lastAmount = 120, bills 4, 0, 0, 1, sum=540
i=3, billNumber = 0,lastAmount = 120, bills 3, 0, 0, 1, sum=530
i=2, billNumber = 0,lastAmount = 120, bills 2, 0, 0, 1, sum=520
i=1, billNumber = 0,lastAmount = 120, bills 1, 0, 0, 1, sum=510
i=0, billNumber = 0,lastAmount = 120, bills 0, 0, 0, 1, sum=500
i=0, billNumber = 3,lastAmount = 120, bills 5, 0, 10, 0, sum=2050
enter 2
i=0, billNumber = 2,lastAmount = 120, bills 5, 0, 0, 0, sum=50
enter 1
i=0, billNumber = 1,lastAmount = 120, bills 5, 0, 0, 0, sum=50
enter 0
i=5, billNumber = 0,lastAmount = 120, bills 5, 0, 0, 0, sum=50
i=4, billNumber = 0,lastAmount = 120, bills 4, 0, 0, 0, sum=40
i=3, billNumber = 0,lastAmount = 120, bills 3, 0, 0, 0, sum=30
i=2, billNumber = 0,lastAmount = 120, bills 2, 0, 0, 0, sum=20
i=1, billNumber = 0,lastAmount = 120, bills 1, 0, 0, 0, sum=10
i=0, billNumber = 0,lastAmount = 120, bills 0, 0, 0, 0, sum=0
18