Cím: A középiskolások 1982. évi Számítástechnikai Versenyén kitűzött néhány feladat megoldása
Szerző(k):  Garádi János 
Füzet: 1983/február, 68 - 73. oldal  PDF  |  MathML 
Témakör(ök): Szakmai cikkek

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ó 9 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 I (= igaz) betűvel jelzett ágon halad tovább, ha nem, akkor a H (= 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 23<10<24, 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 (63+44)1000=34000 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 4 alapműveletet végző, 9 számjegyet megjelenítő zsebszámológép. Ennek segítségével kell kiszámolnunk, hogy 21000 mennyi maradékot ad 1982-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 a, b, c, d és m természetes számok, a és b, ill. c és d ugyanazt a számot adják maradékul m-mel osztva, akkor ac és bd is ugyanazt a maradékot adja.
 


Bontsuk fel 21000-t a következő módon:
21000=2402960=(220)2(215)64.(*)
Először azt határozzuk meg, hogy 240 mennyit ad maradékul 1982-vel osztva: 240=220)2 és 220=1048576, ami még belefér a gépbe. Ezért 3 művelettel (egy maradékos osztással) megállapítható, hogy 220 mennyit ad maradékul 1982-vel osztva: 98-at. A másik tényező, (215)64 felírható
((((((215)2)2)2)3)3
alakban. 3 művelettel megállapítjuk a 215 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:
215=32768maradék:105610562=1115136maradék:125212522=1567504maradék:172417242=2972176maradék:115811582=1340964maradék:113211322=1281424maradék:105210522=1106704maradék:748.

Végül (emlékezzünk a (*) képletre!) a 982748=7183792-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 220 és a 215 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: 982748 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 1982=2991, és 991 prímszám. Ezért a Fermat‐tétel miatt (2990-1) osztható 991-gyel, azaz (2991-2) osztható 1982-vel. Minthogy
21000=(2991-2)29+229,
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 N 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 2N-3 találkozás után minden hírszerző ismerje a teljes felderített információt.
b) Ha N4, adjunk meg olyan algoritmust, amely ugyanezt a célt 2N-4 lépésben valósítja meg.
 

Megoldás. Az N=2, 3 esetre a feladat megoldása nyilvánvaló. Az is világos, hogy N4 esetén elegendő a b) feladatot megoldani. Jelölje h1, h2, ..., hN az N hírszerzőt. N=4-re pl. a (h1,h2), (h3,h4), (h1,h3), (h2,h4) találkozósorozat után megtörténik a teljes információcsere.
Ha N>4, jelöljünk ki egy 4-elemű "agytrösztöt'', pl. h1, h2, h3, h4. Az agytröszt tagjai találkoznak a maradék N-4 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 N-4 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 N tagú társaság. A társaság minden tagja legfeljebb 19 másik tagot ismer. Feladatunk az, hogy a társaságot 2 részre bontsuk, a "7-esek'' és a "11-esek'' klubjára úgy, hogy a "7-esek'' klubjukon belül legfeljebb 7, a "11-esek'' klubjukon belül legfeljebb 11 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 "7-esek'' klubjához tartozik és ebben a klubban legalább 8 ismerőse van, tegyük át a "11-esek'' klubjába, ill. fordítva, ha valakinek a "11-esek'' klubjában legalább 12 ismerőse van, tegyük át a "7-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ő (C1 és C2) függvényt adott meg:
C1=7× (a 11-esek klubján belüli ismeretségek száma) +11× (a 7-esek klubján belüli ismeretségek száma ill.
C2=(a klubokon belüli ismeretségek össz-száma) +4× (a 7-esek klubjának létszáma).
Egyszerű számolás mutatja, hogy a C1 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 C7H16 tapasztalati képleti szénhidrogén összes izomerjének szerkezeti képletét (a hidrogénatomok feltüntetése nélkül). 2 vegyület izomerje egymásnak, ha azonos a tapasztalati képletük, de különböző a szerkezeti képletük, pl.
C|  C ‐ C ‐ C ‐ C ‐ CMM C ‐ C ‐ C ‐ C ‐ C  ||  CC  |  C

Ü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 |CCC ‐ C ‐ C ‐ C ‐ C ‐ C(3)CCC|CC C  5 hosszúságú maximális lánc:CCCC|C ‐ C ‐ C ‐ C ‐ C  (4)CC|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:CCCC|C ‐ C ‐ C ‐ C  (9)CC|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.