Ezt a szám háromszöges feladatot hogy lehetne megoldani PHP nyelven?
Adott ez a háromszög:
1
2 1
4 1 8
2 2 3 4
A feladat:
Irányítatlan (fentről lefelé vagy lentről fölfelé ugyanaz), az adott
elem alatt közvetlenül álló két elemből az egyiket választva végighaladunk a
háromszögön függőleges irányban. Például:
1 -> 1 -> 8 -> 4, 1 -> 1 -> 1 -> 2
1. feladat
Hány lehetséges út van egy N magas háromszögben?
2. feladat
Írjon parancssori programot a maximális összegű út összegének megtalálása. A
programnak "nagyon nagy" (pl. 50 magas) háromszögekre is hamar (1 sec alatt,
körül) le kell tudnia futni egy mai átlagos gépen. A program a standard
bemeneten kapja a háromszöget, soronként a sorokat (sorhatároló karakter a \n), az
elemek egyetlen szóközzel vannak elválasztva. A program kimenete egyetlen szám
legyen, a maximális összegű út összege.
Odáig eljutottam,hogy multidimenziós tömbben vannak a számok,és két ciklus kell. Fejben persze megvannak az utak,csak nem tudom,hogy kivitelezzem PHP-ban.
Előre is köszönöm a válaszokat!
Az N magas számú útvonalat úgy számolnám ki, hogy összeszoroznám a háromszögek lehetséges útvonalait
tehát ha legalulra akarsz eljutni, akkor 1*2*3 itt a példában, és ha ezt így írod, akkor később bármilyen más módosításnál kijöhet, ha pl mindenhol 3 számod van, akkor is
a másodikra a megoldás, hogy megkeresed minden sorban a legnagyobb számot (esetleg rendezéssel) és azokat összeadod (persze kódból)
1+2+8+4
Köszi szépen a választ! :)
Az első feladatnál az 1*2*3 hogy jött ki? Nem úgy van,hogy 1*2*3*4? Tehát a sorok száma?
ja, hogy az összes lehetőségek száma kell és nem az X. elemhez?
akkor igen be kell még szorozni, akkor mindet kell
1, N!
2, Nem elég minden sorban a legnagyobb lehetséges elemet választva végigmenni, ahogy az első írja, az már ennél a példánál is hibás eredményt adna.
Dinamikus programozással kell megoldani, soronként kiszámolod, hogy odáig mennyi a minimális összeg és ezt elmented, a következő sornál ezt használod.
1. Nem N!, a feladat szerint mindig a közvetlenül alatta álló két elemből kell választani, ergo minden lépésnél két választásod van. N magas háromszögben N-1 lépésed van, tehát a válasz 2^(N-1). Ha ez az analógia átláthatóbb, fogd fel úgy, hogy minden lépésnél fordulhatsz jobbra, vagy balra, és az útvonalak felírhatóak jobb és bal sorozataként (azaz bináris formában).
2. Ennek az egyik legegyszerűbb megoldása, hogy a háromszög minden pontjához kiszámolod az addigi leghosszabb útvonal hosszát. Elindulsz mondjuk a háromszög aljáról, az alsó sornál az út addigi hossza adott, a benne levő értékek. Majd soronként felfelé haladva minden pontnál megnézed, hogy a két alatt levő elem közül melyiknek nagyobb az addigi összesített hossza, és a nagyobbik számot hozzáadva az adott pont értékéhez megkapod a ponthoz vezető leghosszabb út hosszát. Ezt viszed egészen a tetejéig, amikoris a csúcsban megkapod a leghosszabb odavezető út hosszát.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!