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?
Minek kigyüjteni?
Gondolom itt véletlenül akarsz generálni.
1. Legenerálod az N üveggolyót amely 1-100000 között lehet csak.
2. Legenerálod melyik játékos kezdjen.
3. Józsit minden körben generál, de maximum annyit, amennyi üveggolyó van.
4. Az osztályársára csak négyzettszámot generálhatsz, de maximum annyit amennyi még van.
5. Minden körbe csak annyit generálsz, amennyi még maradt.
#2 Nem értem ezt a generálgatást.
Úgy kéne megvalósítani a megolást elvileg, hogy van egy függvény ami paraméterként kap egy N számot és visszaad egy boolean értéket, hogy nyerhet-e Józsika. Azt írtam a kérdésben, hogy mindig Józsika kezd.
Pl. 1-nél ő nyer, mert elvesz egyet és nyert.
2-nél nem nyerhet, mert csak 1-et vehet el, de aztán a másik elveszi az utolsót.
3-nál szintén Józsika nyer (elvesz 1-et, a másik is 1-et és Józsika az utolsót).
A 4 négyzet szám, így Józsika első körben el tudja venni az egészet és nyer.
5-nél Józsika elvehet 1-et vagy 4-et. Ha 1-et vesz el akkor a másik elvesz 4-et és nyert. Ha 4-et vesz el, akkor a másik elvesz 1-et és megintcsak nyert.
És így tovább.
Lehet én írtam ki félreérthetően a kérdést, de mindketten csak négyzetszámot tudnak elvenni.
De ez a példákból is látszik szerintem amit az előző hozzászólásomban írtam.
#3 ha ilyen egyszerű lenne a dolog, akkor nem írtam volna ki a kérdést.
8-nál ha elveszi Józsika a lehető legtöbbet (4-et) akkor veszít, mert a következő körben a másik elveszi a maradék 4-et.
Ha viszont 8-ból 1-et vesz el Józsika, akkor nyer.
Marad 7 ugye, abból 4-et vagy 1-et vehet el a másik. Ha 4-et vesz el, akkor marad 3 és Józsika nyer.
Ha 1-et vesz el, akkor marad 6. Józsika elvesz 4-et és megintcsak ő nyer.
Na akkor xd
Ha ugye N a paraméter:
boolean J = true;
int golyok = N;
while(golyok !=0){
Itt kivonod a golyókból az N-nél kisebb lehető legnagyobb négyzetszámot (tehát pl n az 10, akkor itt golyok -= 9;)
J!=J (ez itt csak arra kell hogy Józsi köre-e vagy nem)
}
Return J;
#9 elolvastad az előző hozzászólásomat?
Tegyük fel 8 a paraméter, a te logikád szerint Józsika elvesz belőle 4-et (9 ugye a következő négyzetszám, de annyit nem tud elvenni 8-ból), marad 4. Az osztálytársa elveszi a maradék 4-et és Józsika veszített.
Ez rossz válasz, mivel ha Józsika 4 helyett 1-et vesz el az első körben, akkor optimális játékkal nyer és a kérdés az, hogy nyerhet-e.
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!