Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

Az I. 127. feladat (2006. március)

I. 127. Egy iskolában az egyik titkárnő feladata a tanulók részére elkészíteni a havi ebédjegyeket. Minden hónapban kap egy mintát, amit fénymásolással sokszorosít, és a másolatokat kivágja.

A titkárnő a már meglévő ebédjegyeket és a mintát egymás mellé helyezi a gépbe, hogy egyszerre többet tudjon másolni. Néhányszor lemásolja őket, majd az így készült lapokból kivágja az ebédjegyeket. A kivágott jegyeket a korábbiak mellé illeszti, és megismétli a folyamatot. (A fénymásolóra helyezhető ebédjegyek számát tekintsük korlátlannak.) Mind a másolás, mind a jegyek kivágása bizonyos időbe telik, ami nem függ a másolt vagy szétvágott jegyek számától.

Készítsünk programot, ami segít a titkárnőnek a kellő számú ebédjegy minél gyorsabb elkészítésében. A program kérdezze meg a szükséges ebédjegyek számát (a mintadarabbal együtt), a fénymásoláshoz és a vágáshoz szükséges időket. Ezekből számolja ki az ebédjegyek elkészítésének minimális idejét, és adja meg a lépéseket. A lépéseket egymás mellé írt F (fénymásolás) és K (kivágás) betűkkel kódolja.

A szükséges ebédjegyek száma legfeljebb 1000. A titkárnő nagyon takarékos, mindig pontosan a kért számú ebédjegyet készíti el, és soha sem másol a szükségesnél többet.

Példa (dőlt betűvel jelöltük a számítógép által kiírt üzeneteket):

Ebédjegyek száma:  64
Fénymásolás ideje: 1
Kivágás ideje:     8
Idő:      30
Folyamat: FFFFFFFKFFFFFFFK

Beküldendő a program forráskódja (i127.pas, i127.cpp, ...).

(10 pont)

A beküldési határidő 2006. április 18-án LEJÁRT.


Megoldás. Induljunk ki abból, hogy a titkárnő mindig a szükséges számú ebédjegyet készíti el, soha se többet, illetve hogy egyszerre az összes eddig elkészült ebédjegyet fénymásolja. Vizsgáljuk meg, mi történik néhány fénymásolás alkalmával: n db kezdeti ebédjegyből k fénymásolás után (k+1)n ebédjegy lesz. Mivel kezdetben 1 db minta-ebédjegye volt a titkárnőnek, így N, az ebédjegyek száma, a fénymásolások valamilyen szorzatával lesz egyenlő: N=1.(k1+1).(k2+1).....(ki+1). Másképpen, két kivágás közötti fénymásolások száma +1 az N osztója kell, hogy legyen, illetve ezek szorzatának nyilván N-et kell adnia.

Ezek közül a szorzatok közül az (egyik) minimális idejűt kell meghatározni. Számítsuk ki egy ilyen fénymásolás-sorozat idejét. Jelöljük a fénymásolás idejét Tf-el, a kivágás idejét Tk-val, továbbá a kivágások közötti fénymásolások számát ki-vel, a kivágások számát pedig n-Nel. A fénymásolás ideje így: T=Tk.n+Tf.(k1+k2+...+kn).

Egy lehetséges algoritmus ennek a sorozatnak a meghatározására, hogy végignézzük N összes lehetséges szorzótényezős felbontását, és kiválasztjuk a legkisebb idejűt. Az összes lehetséges felbontást egy backtrack szerű algoritmussal nézhetjük végig, mindig ügyelve arra, hogy a szorzan N maradjon.

Erre látható egy Pascal nyelven írt megoldás. Az esetek végignézését egy rekurzív függvény végzi. Ez megkeresi a paraméterként megadott szám összes osztóját, az aktuálisat eltárolja egy tömbben, majd elosztja a paramétert az aktuális osztóval. Ha a hányados nagyobb 1-nél, akkor a függvény rekurzívan meghívja magát a hányados paraméterrel. Ha 1, akkor visszatér a függvény. Minden lépésben kiszámolja a tömbben lévő számok által reprezentált másolás-folyamat idejét, a legkisebb ilyet pedig eltárolja.

Letölthető Pascal program: i127.pas

Engedy István


Statisztika:

13 dolgozat érkezett.
10 pontot kapott:Balambér Dávid, Czigler András, Györök Péter, Kiss Dániel Miklós, Ozsvárt László, Vincze János.
9 pontot kapott:Kovács 129 Péter, Szoldatics András, Véges Márton.
4 pontot kapott:3 versenyző.
0 pontot kapott:1 versenyző.

A KöMaL 2006. márciusi informatika feladatai