Autorské riešenie Pri riešení tejto úlohy si musíme uvedomiť, že výsledok volieb závisí od počtu hlasov jednotlivých kandidátov, resp od vzájomného vzťahu medzi nimi. Aby sme vedeli, či má niekto nadpolovičnú väčšinu alebo či voľby dopadli nerozhodne, je rozumné si počty hlasov usporiadať. Pri usporadúvaní však nestačí hlasy len preusporiadať, musíme si pamätať aj to, komu patria. Preto pri ich presúvaní budeme presúvať aj mená kandidátov. Na samotné usporiadanie hlasov môžeme použiť rôzne postupy. V našim prípade budeme postupovať nasledovne:
Teraz už určite vieme, že žiaden z počtov hlasov nie je menší ako ten na treťom mieste. Niektorý počet môže byť rovnaký, ale to nie je problém. Nakoniec porovnáme ešte počty hlasov na prvom a druhom mieste. Uvedomme si, že tu už môžu byť iné počty ako na začiatku.
Nezabudnime, že tak ako vzájomne vymiename počty hlasov na rôznych miestach, musíme vymienať aj mená kandidátov. Časť kódu by teda mohla vyzerať nasledovne: viem vyhodnot Počty hlasov sme si uložili do premnných "h1, "h2 a "h3. Mená kandidátov do premenných "m1, "m2 a "m3. Na vzájomnú výmenu hodnôt dvoch premenných sme využili pomocnú premennú "pom. Teraz vieme, že hlasy aj mená kandidátov máme usporiadané od najväčšieho počtu hlasov po najmenší, teda :h1: ≥ :h2 ≥ :h3. V nasledujúcej časti voľby vyhodnotíme. Najskôr zistíme, či voľby majú vítaza. Víťazom je ten, kto získal nadpolovičnú väčšinu hlasov. Keďzě počty hlasov máme usporiadané, počty hlasov môžného víťaza nájdeme na prvom mieste. Ak voľby nemajú víťaza, do druhé kola postupujú "tí kandidáti, ktorí získali prvý alebo druhý najvyšší počet hlasov". Uvedomme si však, že prvý alebo druhý najvyšší počet hlasov mohlo získať viacero kandidátov. Dokonca, všetci mohli získať najvyšši počet hlasov. Túto situáciu vyriešime jednoduchým testom. Ak sú počty hlasov na druhom a treťom mieste rôzne, postupjú len prvý dvaja. Ak sa rovnajú, postupuje ešte aj tretí kandidát. Výsledná procedúra teda môže vyzerať nasledovne: viem vyhodnot Vaše zaujímavé riešenia a najčastejšie chyby V tejto úlohe ste mali asi najväčši problém s porozumením textu "postupujú tí kandidáti, ktorí získali prvý alebo druhý najvyšší počet hlasov". Často ste preto zabudli na prípad, ak postupújú všetci kandidáti. Chybou bolo aj to, že namiesto nadpolovičnej väčšiny ste zisťovali len to, či nejaký kandidát má viac hlasov ako jeho protikandidáti. To však nestačí. Pochváliť chceme tím Expert Nezapamatatelny, ktorý ako jediný mal úplne správne riešenie. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |