Belebonyolódtam egy feladatba, tud valaki segíteni?
Adott egy X érték (pozitív egész szám), amit szét kell darabolnom egy tömbbe úgy, hogy a tömb első eleme szigorúan Y, az utolsó eleme legfeljebb Y legyen, a közbelsők (ha vannak), akkor 2Y maximum. Mi a legjobb elosztás, hogy a lehető legjobban megközelítsük a 2Y-t a köztes elemeken?
Pl. ha X = 50, Y = 5, akkor az elosztás: 5, 10, 10, 10, 10, 5, a képlet, amivel próbálkoztam, csak ideális esetben jó: ((X-2Y) / 2Y) + 2
Az egyszerűség kedvéért maradjunk az Y = 5 értéknél, bármilyen X-re működnie kell.
UPDATE, MEGOLDÁS:
Írtam egy függvényt, ami tetszőleges közbenső értékekkel is működik (2Y helyett bármi lehet).
Az $x = összes elem, $y = első és utolsó maximális elem (az első egyenlő $y-nal), $insider = közbenső maximális elemek száma.
Felhasználható olyan listák előállítására, ahol az első és az utolsó oldalon fejléc található (több helyet foglal), a közbenső oldalakon meg nem (több tétel fér el), pl. többoldalas számlák előállítása esetén.
function partition($x, $y, $insider)
{
$after_first_item = $x - $y;
$singularity = $after_first_item;
$next = 0;
$next_try = $insider;
$items = array($x);
if ($singularity > 0)
{
do
{
if ($singularity <= $y && $singularity > 0)
{
$items[] = $singularity;
break;
}
if ($singularity < 0)
{
$next++;
$next_try = $insider - $next;
$singularity = $after_first_item;
$items = array($x);
}
$items[] = $singularity;
$singularity = ($singularity - $next_try) ;
} while (1);
}
$count_items = count($items);
return array($next_try, $count_items);
}