Darabolás [MEGOLDVA]

Fórumok

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

Hozzászólások

Egyszerűnek néz ki: Y 2Y 2Y ... az utolsó pedig M <= Y , egyébként M-1 1

valami ilyesmi?


 5: 5
 6: 5  1
 7: 5  2
 8: 5  3
 9: 5  4
10: 5  5
11: 5  5  1
12: 5  6  1
13: 5  7  1
14: 5  8  1
15: 5  9  1
16: 5 10  1
17: 5 10  2
18: 5 10  3
19: 5 10  4
20: 5 10  5
21: 5 10  5 1
22: 5 10  6 1
23: 5 10  7 1
24: 5 10  8 1
25: 5 10  9 1
26: 5 10 10 1

Javítva:

Ha képletet akarsz:
(X-Y)/2Y
Az eredmény egész része a köztes elemek száma, a maradék az utolsó elem értéke.
Ha a maradék nagyobb Y-nál*, akkor van még egy köztes elem, melynek érték Y, és az utolsó elem a maradék-Y.

-----

(&%;_98\<|{3W10Tut,P0/on&Jkj"Fg}|B/!~}|{z(8qv55sr1C/n--k**;gfe$$5a!BB]\.-

2Y-nal oszd, mert az első és utolsó elem együttesen (max) 2Y, a közbensők is 2Y; és felfele kell kerekíteni.
elemek száma N = Math.ceil(X/(2*Y)+1)