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. 511. feladat (2020. május)

I. 511. Andi és Bandi a szorzás gyakorlására kitaláltak egy játékot. A játékban először választottak egy pozitív egész számot 1 és 1000 között. Ezután felváltva mondtak pozitív egész számokat, de csak olyat, amit korábban még nem mondott egyikük sem és nem nagyobb a választott számnál. A játék addig tartott, amíg valaki olyan számot nem mondott, amivel megszorozva bármelyik korábban elhangzott számot a szorzat a játék elején választott szám lett. Az veszített, aki az utolsó számot mondta.

Sokat játszottak, majd elkezdtek gondolkodni azon, hogy vajon mi lehet a kezdő vagy a másodiknak számot mondó játékos számára a nyerő stratégia. Rájöttek a módszerre, és arra is, hogy a választott számtól függ, hogy kinek kedvez a játék, de ezt nem nézték meg mind az 1000 esetre.

Találjuk ki, hogy mi lehet a nyerő stratégia, majd készítsünk programot, amely megadja, hogy adott választott szám esetén a kezdő vagy a második játékos tud-e nyerni, ha a stratégiát a játék során végig alkalmazza. A program bemenete a választott szám. A kimenetre írjunk 1-est, ha az első, és 2-est, ha a második játékosnak van nyerő stratégiája.

BemenetKimenet
102

Beküldendő egy tömörített i511.zip állományban a program forráskódja és rövid dokumentációja, amely megadja, hogy a forrásállomány melyik fejlesztői környezetben fordítható.

(10 pont)

A beküldési határidő 2020. június 10-én LEJÁRT.


A program megoldása alapvetően jól sikerült, bár néhány rutinos versenyzőt becsapott. Alapos átolvasás és a szöveg pontos megértése kellett a hibátlan megoldáshoz.

Azok a számok, amelyek nem oszthatók a választott számmal bátran mondahtók bármikor a játék folyamán. Ezenkívül a választott szám oszópárjainak egyike is kimondható. Négyzetszámok esetén a négyzetgyök is mondható, hiszen egyik elhangzott számmal megszorozva sem adja a választott számot. A megoldáshoz tehát a szám osztóit kellett meghatározni, majd ezután a nála nem nagyobb nem osztókat, az osztópárok számát, illetve azt, hogy a szám négyzetszám-e. Egy lehetséges megoldás Python nyelven:

def hanyjo(szam) :
    jo = 0
    for i in range(1,szam+1) :       # a számok 1-től szam-ig
        if szam % i != 0 : jo += 1   # a nem osztók száma, vagyis amik bátran mondhatók
    nem = szam - jo # a többi szám   # a többi szám
    if nem % 2 == 1 :                # ha a szám négyzetszám, akkor a négyzetgyöke szintén jó
        jo += 1
        nem -= 1
    return jo + nem // 2             # ennyi számot lehet a játékban mondani

szam = int(input())
if hanyjo(szam) % 2 ==  0 : print(2)
else : print(1)


Statisztika:

12 dolgozat érkezett.
10 pontot kapott:Kaltenecker Balázs Bence, Mócsy Mátyás, Szabó Barbara Noémi, Tóth Lilla Eszter , Ürmössy Dorottya, Vadász Levente, Vörös 314 László.
9 pontot kapott:Horcsin Bálint.
8 pontot kapott:2 versenyző.
6 pontot kapott:1 versenyző.
5 pontot kapott:1 versenyző.

A KöMaL 2020. májusi informatika feladatai