Stahli: Mathe: geringsten Rest ermitteln

Beitrag lesen

Hi,

Soweit verstehe ich es. Aber nun ändere ich die Schnittlänge auf 2001 und erhalte:

Ups, ja das war ein Schusslichkeitsfehler bei der Ausgabe. Der Fehler dürfte jetzt aber behoben sein. Der vorher gepostete Code und der Link stimmen immernoch, aber ich erweitere mal den gezeigten Code um ein paar Zeilen, damit er verständlicher wird.

  
 echo "<p>Es sollen $count Stücke der Länge $laenge aus den Rohstücken ".implode(', ',$roh).' geschnitten werden.</p>';  
 $roh_count=count($roh);  
 $min_rest=-1;  
 while($kombi[$roh_count-1]<=$count){  
  //Neue Kombination berechnen  
  $kombi[0]++;  
  for($j=0;$j<$roh_count-1;$j++)  
   if($kombi[$j]>$count){  
    $kombi[$j+1]++;  
    $kombi[$j]=0;  
   }  
  //Überprüfen, ob diese Kombination die gewünschte Anzahl an fertigen Stangen ergibt  
  $anzahl=0;  
  foreach($kombi as $par_anzahl)  
   $anzahl+=$par_anzahl;  
  if($anzahl!=$count)//Wenn nicht -> neue Kombination  
   continue;  
  //Rest dieser Kombination berechnen  
  $rest=0;  
  for($i=0;$i<$roh_count;$i++){  
   $a=ceil($kombi[$i]/floor($roh[$i]/$laenge));//Soviele Rohstücke dieser Länge brauche ich  
   $rest+=$a*$roh[$i] - $kombi[$i]*$laenge;  
  }  
  //Wenn neuer Minimalwert erreicht -> merken  
  if(($rest<$min_rest)||($min_rest<0)){  
   $min_kombi=$kombi;  
   $min_rest=$rest;  
  }  
 }  
  
 //Ausgabe  
 echo "<p>Benutze</p>  
 <ul>";  
 for($i=0;$i<$roh_count;$i++){  
  $a=ceil($min_kombi[$i]/floor($roh[$i]/$laenge));//Soviele Rohstücke dieser Länge brauche ich  
  echo "<li>$a mal ".$roh[$i]."er Stange(n).</li>\n";  
 }  
 echo "</ul>\n<p>Dabei entsteht ein Rest von $min_rest.</p>\n";  

4 Stücke á 2001 aus 2 Stangen á 2050 .. du bist ein Genie. Sämtliche Materialeinkäufer werden dich wegen drastisch gesunkener Materialvorhaltung geradezu verehren ;)

Die alte Version lässt sich garantiert besser verkaufen, da hast du Recht. :)

Gruß,
Felix

--
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
René Descartes