<?php
$money = 6600;
5000 => 1,
2000 => 4,
500 => 1,
200 => 3
);
);
function generateCombinations($n, $arrayValues, $banknotes, $N)
{
if (count($arrayValues) == $n) { yield $arrayValues;
return $arrayValues;
}
foreach ($banknotes[$N] as $valueOnSquare) {
yield from 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;
}
}
$generator = generateCombinations(4, [], $banknotes, 0);
foreach ($generator as $arrayValues) {
if (checkingCombination($arrayValues, $money, $nominals)) {
$suitableCombinations[] = checkingCombination($arrayValues, $money, $nominals);
}
}
echo "Подходящие комбинации";
$bestCombination = [INF];
foreach ($suitableCombinations as $combination) {
$bestCombination = $combination;
}
}
echo "Лучшая комбинация с наименьшим количеством купюр";
foreach ($answer as $nominals => $theNumberOfBills) {
echo "{$theNumberOfBills}x{$nominals} ";
}
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7CgokbW9uZXkgPSA2NjAwOwoKJG5vbWluYWxzID0gYXJyYXkoCiAgICA1MDAwID0+IDEsCiAgICAyMDAwID0+IDQsCiAgICA1MDAgPT4gMSwKICAgIDIwMCA9PiAzCik7CiRiYW5rbm90ZXMgPSBhcnJheSgKICAgIDAgPT4gcmFuZ2UoMCwgMSksCiAgICAxID0+IHJhbmdlKDAsIDQpLAogICAgMiA9PiByYW5nZSgwLCAxKSwKICAgIDMgPT4gcmFuZ2UoMCwgMykKKTsKCmZ1bmN0aW9uIGdlbmVyYXRlQ29tYmluYXRpb25zKCRuLCAkYXJyYXlWYWx1ZXMsICRiYW5rbm90ZXMsICROKQp7CiAgICBpZiAoY291bnQoJGFycmF5VmFsdWVzKSA9PSAkbikgewogICAgICAgIHlpZWxkICRhcnJheVZhbHVlczsKICAgICAgICByZXR1cm4gJGFycmF5VmFsdWVzOwogICAgfQoKICAgIGZvcmVhY2ggKCRiYW5rbm90ZXNbJE5dIGFzICR2YWx1ZU9uU3F1YXJlKSB7CiAgICAgICAgeWllbGQgZnJvbSBnZW5lcmF0ZUNvbWJpbmF0aW9ucygkbiwgYXJyYXlfbWVyZ2UoJGFycmF5VmFsdWVzLCBbJHZhbHVlT25TcXVhcmVdKSwgJGJhbmtub3RlcywgJE4gKyAxKTsKICAgIH0KCn0KCmZ1bmN0aW9uIGNoZWNraW5nQ29tYmluYXRpb24oJGFycmF5VmFsdWVzLCAkbW9uZXksICRub21pbmFscykKewogICAgJGkgPSAwOwogICAgJHN1bSA9IDA7CiAgICBmb3JlYWNoICgkbm9taW5hbHMgYXMgJG5vbWluYWwgPT4gJGFtb3VudCkgewogICAgICAgICRzdW0gKz0gJGFycmF5VmFsdWVzWyRpXSAqICRub21pbmFsOyAvL9Ca0L7Quy3QstC+INCx0LDQvdC60L3QvtGCOiB7JGFycmF5VmFsdWVbJGldfS4g0J3QvtC80LjQvdCw0Lsg0LHQsNC90LrQvdC+0YLRiyB7JG5vbWluYWx9Ii4KICAgICAgICAkaSArPSAxOwogICAgfQogICAgaWYgKCRzdW0gPT0gJG1vbmV5KSB7CiAgICAgICAgcmV0dXJuICRhcnJheVZhbHVlczsKICAgIH0KfQoKCiRnZW5lcmF0b3IgPSBnZW5lcmF0ZUNvbWJpbmF0aW9ucyg0LCBbXSwgJGJhbmtub3RlcywgMCk7CmZvcmVhY2ggKCRnZW5lcmF0b3IgYXMgJGFycmF5VmFsdWVzKSB7CiAgICBpZiAoY2hlY2tpbmdDb21iaW5hdGlvbigkYXJyYXlWYWx1ZXMsICRtb25leSwgJG5vbWluYWxzKSkgewogICAgICAgICRzdWl0YWJsZUNvbWJpbmF0aW9uc1tdID0gY2hlY2tpbmdDb21iaW5hdGlvbigkYXJyYXlWYWx1ZXMsICRtb25leSwgJG5vbWluYWxzKTsKICAgIH0KfQoKZWNobyAi0J/QvtC00YXQvtC00Y/RidC40LUg0LrQvtC80LHQuNC90LDRhtC40LgiOwpwcmludF9yKCRzdWl0YWJsZUNvbWJpbmF0aW9ucyk7CgokYmVzdENvbWJpbmF0aW9uID0gW0lORl07CmZvcmVhY2ggKCRzdWl0YWJsZUNvbWJpbmF0aW9ucyBhcyAkY29tYmluYXRpb24pIHsKICAgIGlmIChhcnJheV9zdW0oJGNvbWJpbmF0aW9uKSA8IGFycmF5X3N1bSgkYmVzdENvbWJpbmF0aW9uKSkgewogICAgICAgICRiZXN0Q29tYmluYXRpb24gPSAkY29tYmluYXRpb247CiAgICB9Cn0KZWNobyAi0JvRg9GH0YjQsNGPINC60L7QvNCx0LjQvdCw0YbQuNGPINGBINC90LDQuNC80LXQvdGM0YjQuNC8INC60L7Qu9C40YfQtdGB0YLQstC+0Lwg0LrRg9C/0Y7RgCI7CnByaW50X3IoJGJlc3RDb21iaW5hdGlvbik7CgokYW5zd2VyID0gYXJyYXlfY29tYmluZShhcnJheV9rZXlzKCRub21pbmFscyksICRiZXN0Q29tYmluYXRpb24pOwoKZm9yZWFjaCAoJGFuc3dlciBhcyAkbm9taW5hbHMgPT4gJHRoZU51bWJlck9mQmlsbHMpIHsKICAgIGVjaG8gInskdGhlTnVtYmVyT2ZCaWxsc314eyRub21pbmFsc30gIjsKfQ==