Ich versuche, eine Funktion unten zu implementieren:Finden Sie die Teilmenge eines Arrays, deren Summe gleich ein gegebenes Ziel mit PHP
Zum Beispiel:
$a=array(1,10,25,50);
$number=15;
o/p : 15=1+1+1+1+1+10;
Ich versuche, eine Funktion unten zu implementieren:Finden Sie die Teilmenge eines Arrays, deren Summe gleich ein gegebenes Ziel mit PHP
Zum Beispiel:
$a=array(1,10,25,50);
$number=15;
o/p : 15=1+1+1+1+1+10;
Done:
$a=array(1,10,25,50);
rsort($a);
$number=15;
$final = [];
$remainder = $number;
foreach($a as $num) {
do {
if($num <= $number) {
$final[] = $num;
$remainder -= $num;
}
if($remainder == 0) break;
} while($remainder >= $num);
}
echo $number . " = " . implode(' + ', $final);
Auch Diese Methode:
$a=array(1,10,25,50);
rsort($a);
$number=15;
echo $number . " = ";
$final = [];
foreach($a as $num) {
if((int)($number/$num) > 0) {
$final = array_merge($final, array_fill(0, (int)($number/$num), $num));
$number -= (int)($number/$num) * $num;
}
}
echo implode(' + ', $final);
M ake eine rekursive Funktion dafür:
function getcomb($arr,$actualNum, $total=0, $combination_array = array()){
foreach($arr as $k=>$v){
if($v > $actualNum) continue;
$shiftVal = $v;
if($total+$shiftVal <= $actualNum){
$combination_array[] = $shiftVal;
$total += $shiftVal;
$reminder = $actualNum-$total;
//echo "<pre>combination_array";print_r($combination_array);
if($reminder <= 0){
return $shiftVal;
}else{
return $shiftVal .' + '.getcomb($arr, $actualNum,$total, $combination_array);
}
}
}
}
$a=array(1,10,25,50);
rsort($a);
$number=15;
echo $str = getcomb($a, $number);
Nicht so einfach wie es aussieht –
können wir es durch rekursive tun? –
ist das ein Münzwechselproblem? –