Segítene valaki ebben a C++ feladatban?
Nem sikerül megoldanom ezt a feladatot, mert nem jó a kimenet. Nem vagyok abban sem biztos, hogy jól olvasom-e be az adatokat. A megoldáshoz próbáltam a kiválogatás tételt alkalmazni. Valaki tudna nekem ebben a feladatban segíteni?
Kódom:
Bemenet
A standard bemenet első sorában a futamok száma (0<N≤100), a helyezettek száma(3≤K≤10), az összetett versenybe beleszámító helyezések száma (2≤L≤N) és a versenyzők száma (1≤M≤1000) van, egyetlen szóközzel elválasztva. Ezt követik az egyes futamok a versenyzők sorrendjével. Minden sorban a versenyzők sorszámai (1≤Si,j≤M) vannak, helyezésük szerint csökkenő sorrendben, egy-egy szóközzel elválasztva.
Kimenet
A standard kimenet első sorába azon versenyzők számát kell írni, ahányan mindegyik futamban az első K helyezés valamelyikét érték el, majd pedig az ilyen versenyzők sorszámát, egy-egy szóközzel elválasztva, növekvő sorrendben!
Példa
Bemenet
5 5 3 15
1 2 3 4 5
2 4 6 8 3
3 6 9 12 4
5 4 3 2 1
1 4 5 2 3
Kimenet
2 3 4
Szerintem - a leegyszerűsítés kedvéért - először konkrét rekordokkal és versenyekkel kellene megoldani, ez a tömbösítés stb nehezíti az átláthatóságot.
Vagy legyen triatlon ahol lehet csak egy-egy versenyszámban is indulni...
ha az a cél, hogy programozási tételekkel (kevésbé hatékonyan) oldd meg a feladatot:
//megadja egy logikai értékkel, hogy egy adott versenyző egy adott futamban elért-e az első K helyezés valamelyikét
elértHelyezést(i, j, eredmények[N][K]):
elérte = hamis
k = 1 to K:
elérte = elérte || eredmények[j][k] == i
return elérte
//megadja egy logikai értékkel, hogy az adott versenyző mindig elérte-e az első K helyezés valamelyikét
mindigElsőK(i, eredmények[N][K]):
mindig = igaz
j = 1 to N:
mindig = mindig && elértHelyezést(i, j, eredmények[N][K])
return mindig
main:
//eredmények[N][K] beolvasása
válasz = []
i = 1 to M:
if mindigElsőK(i, eredmények[N][K]):
válasz = válasz + [i]
ennél jóval gyorsabban pedig úgy lehetne megoldani, hogy készítesz egy M elemű map-et, ahol 1-től M-ig minden értéket kinullázol
ezután egyszer kell végigmenni az összes adaton, és a map segítségével megszámolni, hogy melyik versenyző hányszor ért el helyezést
a válasz megadásához meg ki kell válogatni a map-ből azokat, amiknek értéke N
Miét lett törölve a kommentem??
Ez egy duplikált kérdés:
https://www.gyakorikerdesek.hu/szamitastechnika__programozas..
#2 Igen a programozási tételt kell használni.
Úgy próbáltam megoldani, hogy egy tömbbe belerakom azokat, akik ugye mindegyik sorban benne voltak és megszámolom őket a hossz változóval, de valami nem jó mert valami hatalmas szám jön ki eredményül.
if (dupla[i][j]== dupla[i+1][j])
{
dupla[i][j] = megoldas[x];
hossz++;
}
ez mi akar lenni?
másrészt meg persze, hogy mindegyik 0, sehol nem adsz értéket a megoldas tömb elemeinek
2-es válaszban leírtam, hogy programozási a programozási tételeknek megfelelően mit kell csinálni
írd meg azt a két függvényt, és a mainben csak az az egy ciklus kell
Meg akartam nézni hogy az 1.sor eleme egyenlő-e a 2. sor elemével és ha igen akkor hozzáadni a lista elemét a megoldas tömbbe.
Még nem tanultam függvényeket de megírtam : [link]
Így kellene kinéznie ?
nem
azokat kell kiválogatni, amelyek mindegyik sorban szerepelnek, ehhez nem elég az, hogy ott van a következő sorban is ugyanazon a helyen
amit írtam 2-es válaszban, az nem c++ kód, szóval ne átmásold, hanem próbáld megérteni, hogy mi a lényege, és után valósítsd meg c++-ban
de előtte nem árt ismerni a programozási tételeket
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!