Az I. 439. feladat (2017. november) |
I. 439. Egy hosszú egyenes folyón utazunk folyásirányban lefelé egy kevés benzinnel rendelkező motorcsónakon. A folyószakasz hosszú, ezért csak időnként kapcsoljuk be a motort, különben csak az áramlás sebességével utazunk (sodródunk) lefelé. Amikor a motor működik, akkor a parthoz viszonyított sebesség az áramlás sebességének és a motorcsónak vízhez viszonyított sebességének összege lesz, mivel a csónak mindig az áramlás irányában áll.
Készítsünk programot, amely a különböző folyószakaszok \(\displaystyle v_{i}\) áramlási sebességének, a motorcsónak vízhez viszonyított \(\displaystyle v_{m}\) sebességének és maximális működtetési idejének ismeretében megadja a kiindulási helytől \(\displaystyle L\) távolságra lévő célba érkezés minimális idejét.
A standard bemenet első sora négy számot tartalmaz: a megteendő folyószakasz \(\displaystyle L\) (\(\displaystyle 1\le L\le 100\)) hosszát (km), a motorcsónak \(\displaystyle 1\le v_{m} \le 10\) sebességét (km/h) a vízhez képest, a motor \(\displaystyle T\) (\(\displaystyle 1\le T\le 10\)) maximális üzemeltetési idejét (h) és a különböző sodrási sebességű folyószakaszok \(\displaystyle N\) (\(\displaystyle 1\le N\le 50\)) számát. Az ezt követő \(\displaystyle N\) sor soronként két számot tartalmaz: az adott sodrású folyószakasz elejének a kiindulási helytől mért távolságát (\(\displaystyle 0\le E_{i} \le L\)) (km) és a folyószakasz sodrási sebességét \(\displaystyle v_{i}\) (\(\displaystyle 1\le v_{i} \le 10\)) (km/h).
A standard kimenetre írjuk ki a célba érkezés minimális idejét órában, három tizedesjegy pontossággal.
Példa bemenet (a / jel új sort helyettesít) | Kimenet |
20 2 3 5 / 0 2 / 3 1 / 7 2 / 12 1 / 15 2 | 8.167 |
Beküldendő egy tömörített i439.zip állományban a program forráskódja, valamint a program rövid dokumentációja, amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztői környezetben fordítható.
(10 pont)
A beküldési határidő 2017. december 11-én LEJÁRT.
Megoldásokról:
A feladat standard bemenet használatát kérte. A versenyzők közül többen a bemenetet fájl beolvasással, vagy a billentyűzet olvasásával oldották meg. Egy-egy teszt 20-50 adat megadását igényli. Ha ezt billentyűzetről kéne megadni, akkor szinte lehetetlen lenne a versenyzők munkáinak értékelése.
A standard bemenet használatáról itt olvashatunk: stdio.pdf
Mintamegoldás:
A közölt mintamegoldás Békési Péter, a zalaegerszegi Zrínyi Miklós Gimnázium 10. osztályos tanulójától származik: Module1.vb
A feldolgozás előtt még rendeznem kellett az adatokat, hisz a feladatot lényegében a mohó algoritmussal oldottam meg, melyben most a választási tulajdonság, hogy a minél kisebb sebességű szakaszoknál használjuk minél tovább a motort, mivel így érhetünk el minimális időt (ez látszik már a képletből is (t=s/v). Ezt a rendezést beépített rendezési függvénnyel és lambdakifejezéssel csináltam (forrás: Juhász Tibor, Kiss Zsolt: Programozási ismeretek versenyzőknek).
A feldolgozásnál egy összidő nevű változóban számoltam az minimális időt. Ehhez egy ciklussal mentem végig a már rendezett adatokon amíg még volt üzemanyag. A szükséges idő a szakasz hosszának és a motor valamint a folyószakasz sebességének összegének hányadosa. Egyébként pedig egyszerűen csak az út és a folyószakasz sebességének hányadosa. Ha nem pont egy szakasz végénél fogy el az üzemanyag, akkor az adott szakaszt két részre kell bontani.
Statisztika:
15 dolgozat érkezett. 10 pontot kapott: Békési Péter, Horcsin Bálint, Kis Lázár Bence, Ürmössy Dorottya, Vígh Márton, Zsombó István. 9 pontot kapott: Bodgál Attila Zoltán, Porkoláb Mercédesz. 8 pontot kapott: 1 versenyző. 6 pontot kapott: 1 versenyző. 5 pontot kapott: 3 versenyző. 4 pontot kapott: 1 versenyző. 3 pontot kapott: 1 versenyző.
A KöMaL 2017. novemberi informatika feladatai