Hogy kéne megoldani ezt a feladatot? (C# de mindegy a nyelv végülis)
Józsika egy osztálytársával játszik. Van N darab üveggolyójuk egy kupacban. N 1-100000 intervallumban lehet.
Egyik körben Józsika vesz el X darab golyót a kupacból, másik körben az osztálytársa úgy, hogy X csak négyzet szám lehet, tehát 1, 4, 9, 16, 25 stb. Az a játékos nyer, aki az utolsó golyót elveszi.
Ha optimálisan játszanak, megnyerheti-e Józsika a játékot, feltéve, hogy mindig ő kezd?
"Ez egy alap DP feladat, nem kell hozzá semmi matematikai formula, kb. 10 sorban megoldható."
Ameddig matematikailag nem tudod, hogy melyek lehetnek azok az esetek, amelyeknél biztosan veszíteni fog addig leprogramozni sem tudod.
Például 5 esetében 1,4 mennyiséget lehet csak elvenni, mindegy melyiket választja a kezdő játékos már veszített.
Ha tudod melyek azok a számok amelyek ugyanilyen helyzetbe hozzák a kezdő játékost akkor már lehet is programozni.
Ahhoz, hogy tudd, matematikailag kell átgondolni és addig semmi köze a programozáshoz. ;)
Nem értem én sem miért szükséges valami matematikai formula.
Elvileg elég lenne pl. leszimulálni minden lehetséges választást valami backtracking-szerű algoritmussal, nem?
És miért akarnál ilyen algoritmusokat alkalmazni?
Ha meg van a formula akkor, a formulát használod. Ha az N szám megfelel a formulára akkor return false -> Józsi vesztett, ha nem akkor return true -> Józsi nyert. Ez sokkal gyorsabb, mint backtrack algoritmusokat használni. Ehhez meg az kell, hogy az ember tényleg jól tudja a matekot ... Szóval gondolkozni kell rajta, ha ez meg van akkor igazából tényleg pár sor az egész...
Na, ilyen jó kérdést rég láttam.
Ha van megoldás, azt várom ám, mert ez most elgondolkodtatott. :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!