<?php
$money = 6600;
5000 => 1,
2000 => 4,
500 => 1,
200 => 3
);
);
$suitableCombinations = [];
function generateCombinations($n, $arrayValues, $banknotes, $N)
{
global $money, $nominals, $suitableCombinations;
if (count($arrayValues) == $n) { if (checkingCombination($arrayValues, $money, $nominals)) {
$suitableCombinations[] = checkingCombination($arrayValues, $money, $nominals);
}
return $arrayValues;
}
foreach ($banknotes[$N] as $valueOnSquare) {
generateCombinations
($n, array_merge($arrayValues, [$valueOnSquare]), $banknotes, $N + 1); }
}
function checkingCombination($arrayValues, $money, $nominals)
{
$i = 0;
$sum = 0;
foreach ($nominals as $nominal => $amount) {
$sum += $arrayValues[$i] * $nominal; //Кол-во банкнот: {$arrayValue[$i]}. Номинал банкноты {$nominal}".
$i += 1;
}
if ($sum == $money) {
return $arrayValues;
}
}
generateCombinations(4, [], $banknotes, 0);
echo "Подходящие комбинации".PHP_EOL;
$bestCombination = [INF];
foreach ($suitableCombinations as $combination) {
$bestCombination = $combination;
}
}
echo "Лучшая комбинация с наименьшим количеством купюр".PHP_EOL;
foreach ($answer as $nominals => $theNumberOfBills) {
echo "{$theNumberOfBills}x{$nominals} ";
}
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7CgokbW9uZXkgPSA2NjAwOwoKJG5vbWluYWxzID0gYXJyYXkoCiAgICA1MDAwID0+IDEsCiAgICAyMDAwID0+IDQsCiAgICA1MDAgPT4gMSwKICAgIDIwMCA9PiAzCik7CiRiYW5rbm90ZXMgPSBhcnJheSgKICAgIDAgPT4gcmFuZ2UoMCwgMSksCiAgICAxID0+IHJhbmdlKDAsIDQpLAogICAgMiA9PiByYW5nZSgwLCAxKSwKICAgIDMgPT4gcmFuZ2UoMCwgMykKKTsKCiRzdWl0YWJsZUNvbWJpbmF0aW9ucyA9IFtdOwoKZnVuY3Rpb24gZ2VuZXJhdGVDb21iaW5hdGlvbnMoJG4sICRhcnJheVZhbHVlcywgJGJhbmtub3RlcywgJE4pCnsKICAgIGdsb2JhbCAkbW9uZXksICRub21pbmFscywgJHN1aXRhYmxlQ29tYmluYXRpb25zOwogICAgaWYgKGNvdW50KCRhcnJheVZhbHVlcykgPT0gJG4pIHsKICAgICAgICBpZiAoY2hlY2tpbmdDb21iaW5hdGlvbigkYXJyYXlWYWx1ZXMsICRtb25leSwgJG5vbWluYWxzKSkgewogICAgICAgICAgICAkc3VpdGFibGVDb21iaW5hdGlvbnNbXSA9IGNoZWNraW5nQ29tYmluYXRpb24oJGFycmF5VmFsdWVzLCAkbW9uZXksICRub21pbmFscyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkYXJyYXlWYWx1ZXM7CiAgICB9CgogICAgZm9yZWFjaCAoJGJhbmtub3Rlc1skTl0gYXMgJHZhbHVlT25TcXVhcmUpIHsKICAgICAgICBnZW5lcmF0ZUNvbWJpbmF0aW9ucygkbiwgYXJyYXlfbWVyZ2UoJGFycmF5VmFsdWVzLCBbJHZhbHVlT25TcXVhcmVdKSwgJGJhbmtub3RlcywgJE4gKyAxKTsKICAgIH0KCn0KCmZ1bmN0aW9uIGNoZWNraW5nQ29tYmluYXRpb24oJGFycmF5VmFsdWVzLCAkbW9uZXksICRub21pbmFscykKewogICAgJGkgPSAwOwogICAgJHN1bSA9IDA7CiAgICBmb3JlYWNoICgkbm9taW5hbHMgYXMgJG5vbWluYWwgPT4gJGFtb3VudCkgewogICAgICAgICRzdW0gKz0gJGFycmF5VmFsdWVzWyRpXSAqICRub21pbmFsOyAvL9Ca0L7Quy3QstC+INCx0LDQvdC60L3QvtGCOiB7JGFycmF5VmFsdWVbJGldfS4g0J3QvtC80LjQvdCw0Lsg0LHQsNC90LrQvdC+0YLRiyB7JG5vbWluYWx9Ii4KICAgICAgICAkaSArPSAxOwogICAgfQogICAgaWYgKCRzdW0gPT0gJG1vbmV5KSB7CiAgICAgICAgcmV0dXJuICRhcnJheVZhbHVlczsKICAgIH0KfQoKZ2VuZXJhdGVDb21iaW5hdGlvbnMoNCwgW10sICRiYW5rbm90ZXMsIDApOwoKZWNobyAi0J/QvtC00YXQvtC00Y/RidC40LUg0LrQvtC80LHQuNC90LDRhtC40LgiLlBIUF9FT0w7CnByaW50X3IoJHN1aXRhYmxlQ29tYmluYXRpb25zKTsKCiRiZXN0Q29tYmluYXRpb24gPSBbSU5GXTsKZm9yZWFjaCAoJHN1aXRhYmxlQ29tYmluYXRpb25zIGFzICRjb21iaW5hdGlvbikgewogICAgaWYgKGFycmF5X3N1bSgkY29tYmluYXRpb24pIDwgYXJyYXlfc3VtKCRiZXN0Q29tYmluYXRpb24pKSB7CiAgICAgICAgJGJlc3RDb21iaW5hdGlvbiA9ICRjb21iaW5hdGlvbjsKICAgIH0KfQplY2hvICLQm9GD0YfRiNCw0Y8g0LrQvtC80LHQuNC90LDRhtC40Y8g0YEg0L3QsNC40LzQtdC90YzRiNC40Lwg0LrQvtC70LjRh9C10YHRgtCy0L7QvCDQutGD0L/RjtGAIi5QSFBfRU9MOwpwcmludF9yKCRiZXN0Q29tYmluYXRpb24pOwoKJGFuc3dlciA9IGFycmF5X2NvbWJpbmUoYXJyYXlfa2V5cygkbm9taW5hbHMpLCAkYmVzdENvbWJpbmF0aW9uKTsKCmZvcmVhY2ggKCRhbnN3ZXIgYXMgJG5vbWluYWxzID0+ICR0aGVOdW1iZXJPZkJpbGxzKSB7CiAgICBlY2hvICJ7JHRoZU51bWJlck9mQmlsbHN9eHskbm9taW5hbHN9ICI7Cn0K