2017-05-31 1 views

Antwort

1

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); 
1

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); 

Cleck here to check output

Verwandte Themen