A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre. A középiskolások 1982. évi Számítástechnikai Versenyén kitűzött néhány feladat megoldása Az első forduló 2. feladata A szovjet borítékokon az alábbi ábrán látható módon kell megadni az irányítószámok számjegyeit. Ez gyakorlatilag azt jelenti, hogy a tíz számjegy mindegyikét az itt látható vonalkából kell összeállítani. A leveleket osztályozó gép a programozó által előírt sorrendben lépésenként egy‐egy vonalkáról eldönti, hogy megvastagította-e a levél feladója. Adjunk meg egy eljárást, amelynek során a gép minél kevesebb vonalka megvizsgálásával dönti el, hogy milyen számjegy van a téglalapban. (Mindegyik kérdés függhet a korábbi kérdésekre kapott választói.) Képzeljük el, hogy a gépnek tízezer borítékot kell az utolsó számjegyük alapján szétválogatnia: mindegyik számjegy egyforma gyakorisággal (ezerszer) fordul elő. Hány vonalkát fog a gép végigvizsgálni a feladat megoldása során? Megoldás. Az osztályozó eljárást legszemléletesebben az ún. döntési fa felrajzolásával adhatjuk meg. Az ábra "olvasása'' nyilvánvaló: minden csomópontban a gép eldönti, hogy a megadott vonalka vastag-e vagy nem. Ha vastag, az (= igaz) betűvel jelzett ágon halad tovább, ha nem, akkor a (= hamis) ágon. Könnyen látható az is, hogy egy adott szám meghatározásához annyi vizsgálat szükséges, ahány szint van fölötte a döntési fában. Minthogy egy vizsgálatnak pontosan kétféle eredménye lehet és , nincs olyan döntési fa, amelyben minden számjegy legfeljebb 3 vizsgálattal meghatározható. Az is igazolható, hogy a 3 vagy 4 vizsgálattal eredményre vezető döntési fákban mindig van 6 szám, amelynek meghatározása 3 vizsgálatot, míg a további 4 szám meghatározása 4 vizsgálatot igényel. Ilyen döntési fák még:
Ha mind a 10 számjegy azonos gyakorisággal fordul elő, akkor éppen ezek a döntési fák optimálisak. Példánkban vizsgálatot kell végezni. Megjegyzések. 1.A számjegyek kódolása a szovjet borítékokon szerencsés, mert mint megmutattuk ‐ egyenletes előfordulási gyakoriság esetén ‐ szerkeszthető optimális döntési fa. 2. Ha a számjegyek különböző gyakorisággal fordulnak elő, nem feltétlenül a fenti ún. kiegyensúlyozott döntési fák az optimálisak. Az első forduló 3. feladata Adott egy alapműveletet végző, számjegyet megjelenítő zsebszámológép. Ennek segítségével kell kiszámolnunk, hogy mennyi maradékot ad -vel osztva. A memória funkcióját egy papírlap és toll segítségével magunk látjuk el (a papíron műveleteket nem végezhetünk). Adjunk módszert a maradék minél kevesebb művelettel való kiszámolására. Állapítsuk meg, hogy eljárásunk során hány alapműveletet kell a gépnek elvégeznie. I. megoldás. A feladat megoldásához a következő elemi tényt használjuk fel. Ha , , , és természetes számok, és , ill. és ugyanazt a számot adják maradékul -mel osztva, akkor és is ugyanazt a maradékot adja.
Bontsuk fel -t a következő módon: | | (*) | Először azt határozzuk meg, hogy mennyit ad maradékul 1982-vel osztva: és , ami még belefér a gépbe. Ezért 3 művelettel (egy maradékos osztással) megállapítható, hogy mennyit ad maradékul 1982-vel osztva: 98-at. A másik tényező, felírható alakban. 3 művelettel megállapítjuk a maradékát, ezt négyzetre emeljük, 3 művelettel megállapítjuk a maradékot, majd ezt az utóbbi 4 lépést 5-ször megismételjük. Bár a feladat kitűzésében ez nem szerepel, illusztrációként elvégezzük a számításokat:
Végül (emlékezzünk a (*) képletre!) a -ről további 3 művelettel megállapítható, hogy 1982-vel osztva 1024-et ad maradékul. Ha feltételezzük, hogy 2 első 10 hatványát fejből tudjuk, akkor a és a kiszámítása egy‐egy műveletet igényel. Ezenkívül végeztünk 7 négyzetreemelést, 1 szorzást és 8 maradékos osztást (24 művelet), tehát összesen 34 műveletet. (Az utolsó lépésben egy kis szerencsénk volt: még befért a gépbe.) II. megoldás. Az előző megoldás során az 1982 semmilyen speciális tulajdonságát nem használtuk ki. Vegyük azonban észre, hogy , és 991 prímszám. Ezért a Fermat‐tétel miatt osztható 991-gyel, azaz osztható 1982-vel. Minthogy ez utóbbi összeg első tagja osztható 1982-vel, tehát a keresett maradék 1024. Ez a megoldás végül nem igényelt egyetlen "gépi'' műveletet sem, mert fel tudtuk használni azt a körülményt, hogy az 1982 fele egy 1000-hez közeli, 1000-nél kisebb prímszám. Megjegyzés. Azok a versenyzők, akik ezt a megoldást adták ‐ igen helyesen ‐ észrevették, hogy ez "nem számítástechnikai'' megoldás, mert nem lehet egyszerűen és áttekinthetően általános algoritmussá fejleszteni. A második forduló 3. feladata Van hírszerző. A felderítés befejezése után igyekeznek minél gyorsabban egymást értesíteni a szerzett információról. Egyszerre csak két hírszerző találkozhat, egy találkozáskor mindent elmondanak egymásnak,amit tudnak. a) Adjunk meg olyan algoritmust, hogy találkozás után minden hírszerző ismerje a teljes felderített információt. b) Ha , adjunk meg olyan algoritmust, amely ugyanezt a célt lépésben valósítja meg. Megoldás. Az , 3 esetre a feladat megoldása nyilvánvaló. Az is világos, hogy esetén elegendő a b) feladatot megoldani. Jelölje , , , az hírszerzőt. -re pl. a , , , találkozósorozat után megtörténik a teljes információcsere. Ha , jelöljünk ki egy 4-elemű "agytrösztöt'', pl. , , , . Az agytröszt tagjai találkoznak a maradék hírszerzővel. Ezek után egymás között 4 találkozás során kicserélik az általuk ismert (teljes) információt, majd az agytröszt tagjai találkozás során közlik a teljes információt a többi hírszerzővel. Látható, hogy lényegtelen az agytröszt tagjai közötti " munkamegosztás'' az információ begyűjtésében és terjesztésében. A második forduló 4. feladata Van egy tagú társaság. A társaság minden tagja legfeljebb másik tagot ismer. Feladatunk az, hogy a társaságot részre bontsuk, a "-esek'' és a "-esek'' klubjára úgy, hogy a "-esek'' klubjukon belül legfeljebb , a "-esek'' klubjukon belül legfeljebb másik tagot ismerjenek. Egy matematikus a következő eljárást ajánlja: először osszuk tetszőlegesen két részre a társaságot, majd "fokozatosan'' lépésenként javítsuk ki az esetleges hibákat: ha valaki egy adott lépésben a "-esek'' klubjához tartozik és ebben a klubban legalább ismerőse van, tegyük át a "-esek'' klubjába, ill. fordítva, ha valakinek a "-esek'' klubjában legalább ismerőse van, tegyük át a "-esek'' közé. Így minden csere után megváltozik a klubok összetétele. Igaz-e, hogy ez az eljárás véges számú lépésben biztosan célra vezet? Megoldás. A matematikusnak igaza van. Meg tudunk ugyanis adni olyan, a klubokba sorolástól függő természetes szám értékű függvényeket, amelyek értéke minden egyes javító lépés során legalább 1-gyel csökken. Ezért az algoritmus véges sok lépés után megszakad, ami azt jelenti, hogy a kívánt tulajdonságú klubok létrejöttek. A feladatot két csapat oldotta meg helyesen, a két csapat két különböző ( és ) függvényt adott meg: (a 11-esek klubján belüli ismeretségek száma) (a 7-esek klubján belüli ismeretségek száma ill. =(a klubokon belüli ismeretségek össz-száma) (a 7-esek klubjának létszáma). Egyszerű számolás mutatja, hogy a függvény értéke 11-es 7-es csere esetén legalább 7-tel, 7-es- 11-es csere esetén legalább 11-gyel csökken. Mindkét függvény felhasználásával azt kapjuk, hogy ha kezdetben mindenki a 11-esek klubjába volt besorolva, akkor az eljárás véget ér, mégpedig legfeljebb annyi lépésben, mint amennyi a társaságban az összes ismeretségek száma. A második forduló 5. feladata Írjuk föl a tapasztalati képleti szénhidrogén összes izomerjének szerkezeti képletét (a hidrogénatomok feltüntetése nélkül). vegyület izomerje egymásnak, ha azonos a tapasztalati képletük, de különböző a szerkezeti képletük, pl.
Ügyeljünk arra, hogy minden vegyület pontosan egyszer szerepeljen! Mennyi a kapott izomerek száma? Megoldás. A feladatot helyesen megoldók észrevették, hogy az izomereket a bennük található leghosszabb szénlánc szerint rendezve érdemes felsorolni !
7 hosszúságú maximális lánc:C ‐ C ‐ C ‐ C ‐ C ‐ C ‐ C MMMMM(1) 6 hosszúságú maximális lánc:C ‐ C ‐ C ‐ C ‐ C ‐ C(2)C‐ |C‐CC ‐ C ‐ C ‐ C ‐ C ‐ C(3)C‐C‐C|C‐C‐ C 5 hosszúságú maximális lánc:C‐CC‐C|C ‐ C ‐ C ‐ C ‐ C (4)C‐C|C‐ CMMM CMMM |MMMMMMMMC ‐ C ‐ C ‐ C ‐ C C ‐ C ‐ C ‐ C ‐ C (5)MMMMMM |MM|(6)MMM |MMMMMMMMMMCMiiCMMM CMMMMMMMMC ‐ C ‐ C ‐ C ‐ C C ‐ C ‐ C ‐ C ‐ CMMMMMMMMMMMM|MMM|MMMM| (7)MMMMMMMM C(8)MMMCMiiMiiCMMMMMMMMMMMM|MMMMMMMMMMMM C 4 hosszúságú maximális lánc:C‐CC‐C|C ‐ C ‐ C ‐ C (9)C‐C|M|C‐ CMC Összesen 9 izomér. Egy versenyzőpáros felhívta a figyelmet arra, hogy ha a hidrogénatomokat is feltüntetnénk, akkor a 3. és a 6. vegyületnek 2 olyan változata létezik, amelyek a "vegyértékvonalak'' folytonos hajlításával, ill. nyújtásával és térbeli mozgással nem vihetők át egymásba, csak egymás tükörképeibe (sztereoizoméria). Ez a helyzet akkor áll elő, ha van olyan szénatom, amelynek mind a 4 vegyértékéhez más vegyületcsoport kapcsolódik. Így a sztereoizomérek száma 11.
DIMENSION K (10) DATA K/1,1,2,6,24,120,720,5040,40320,362880/ PRINT 4 FORMAT(' A KÖVETKEZÖ SZÁMOK A JOK:') IR=0 D O 1 I 1=1.10 D O 1 I 2=1,10 D O 1 I 3=1,10 D O 1 I 4=1,10 D O 1 I 5=1,10 D O 1 I 6=1,10 L = O K 1= I 1-1 K 2 =I 2-1 K 3 = I 3-1 K 4 = I 4-1 K 5 = I 5-1 K 6 = I 6-1 1=K6+K5*10+K4*100+3*1000+K2*10000+K1*100000 IF (K1.NE.0)GOTO2 L=L+1 IF (K2.NE.0)GOTO2 L=L+1 IF (K3.NE.O)GOTO2 L=L+1 IF (K4.NE.O)GOTO2 L=L+1 IF (K5.NE.0)GOTO2 L=L+1 IF (K6.EQ.O)GOTO1 CONTINUE M=K(I1)+K(I2)+K(I3)+K(I4)+K(I5)+K(I6)-L IF(I.RQ.M)PRINT 3,I IF(I.EQ.M)IR=IR+1 FORMAT(1X,16) CONTINUE PRINT 5,IR FORMAT(' TEHÁT ÖSSZESEN ',16,'DARAB SZÁKOT TALÁLTUNK') STOP 1 END
A második forduló 6. feladata Számítsuk ki program segítségével, hogy 1-tő1 106-ig hány darab természetes számnak van olyan tulajdonsága, hogy a szám egyenlő számjegyei faktoriálisainak összegével (pl. 145=1!+4!+5!). A végeredményt az IRDKI nevű egész változóban tároljuk. A program írásához a választott nyelvnek lehetőség szerinti legszűkebb utasítás készletét használjuk! A program FORTRAN, PL/1, BASIC, ALGOL és COBOL nyelveken vagy blokk‐diagrammal készíthető el. A megoldás egy programja látható az előző oldalon. A megfelelő tulajdonságú természetes számok: 1, 2, 145, 40 585.
|