Hogyan tudnám kiíratni egy sorban az értékeket ebben a C++ kódban?
Az lenne a feladat hogy:
Írj programot, amely megadja 0-9, 10-19,...,190-200 négyzetméteres kategóriákba osztva a lakások számát!
A bemenetben a másodjára beírt számok a négyzetméter értékek. A kód nem ad hibát, de mégse a kimenet szerint írja ki az értékeket, hanem csak egy értéket ad ki. Mi lehet a probléma ?
Bemenet :
4
10 45
20 80
10 30
100 145
Kimenet: 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0
A kód amit írtál mindenhogy rossz. Nem rakunk orrba szájba for ciklusokat. Biztos, hogy rossz irányba gondolkodsz.
Amire én gondolok: szükséged van valamiféle hashmap szerű kulcs-érték páros megoldásra. Neked ki kell generáltatnod a négyzetméter kategóriákat, és le kell tárolnod valahol, de úgy, hogy tudd vizsgálni azok értékeit.
Egy proli megoldás eszembe jutott:
Hozz létre egy tömböt, mely 20 darab belső tömbből áll (200/10 = 20). Valami ilyesmire gondolok:
[
[0, 9, 0],
[10, 19, 0],
[20, 29, 0]
...
]
A belső tömb első eleme az alsó határ, a második eleme a felső határ, a harmadik eleme pedig a darabszám legyen. Nem értek annyira a C++-hoz, ha tudsz jobb megoldást a kulcs-érték párra, akkor használd azt, itt az a lényeg, hogy GENERÁLNOD kell a kulcsaidat, majd egy darab forciklussal végigmenni az adatokon, majd minden iterációnál vizsgálni azt, hogy valamelyik intervallumába (első két elem) beleesik-e. Ha igen, akkor annak a tömbnek a 2. eleme (0tólé indulunk) ++
Aztán lehet túl bonyolítottam. Valahogy generáld ki a tömböket, ezt már rád bízom
Amit akarsz kiiratni az így nézne ki a kódodban:
cout << a1 << " " << a2 << " " << a3 << " " << a4 << " " << a5 << " " << a6 << " " << a7 << " " << a8 << " " << a9 << " " << a10 << " " << a11 << " " << a12;
De még ez is egy hülyeséget fog kiírni, mert az összehasonlító szintaxis amit használsz a cikluson belüli if-ben nem létezik, tehát a "0<=t[i]<10" helyett "0<=t[i] && t[i]<10" lenne működőképes.
De ez valóban nem egy túl szép megoldás, ez már csak abból is látszik, hogy kb ugyanaz van le copy-pastelve többször, így ezt a hibát is mindegyikben egyenként kell javítani. (Vagyis nem kell, ha helyette újraírod szebben.)
#1
Igen célszerűbb lenne ez a megoldás, amit mondasz de mivel kezdő vagyok ötletem sincs, hogy hogyan tudnám kivitelezni ezeket a több értékes tömböket.
#2 Nem valami szép az tény, de hirtelen nincs jobb ötletem, hogyan tudnám megcsinálni.
Illetve hogyan lehet beolvasni két értéket úgy, hogy csak az egyiket vegyük figyelembe?
const int MaxN = 100;
int t[MaxN];
int N;
cin >> N;
for(int i=0; i<N; i++)
{
cin >> t[i];
}
A for ciklusban kellene még egy változót létrehozni vagy int N mellé egy újat ?
Illetve #1 gondolatmenetét részben követve, hogyha csinálsz egy sima 0-ra inicializált egydimenziós 20 elemű int tömböt, akkor abban jelen esetben elég könnyen meghatározható, hogy egy adott érték esetén melyik indexű elemet kell növeld, csak el kell osztani 10-el. (Speciális eset a >=200, ami szintén az 19-es indexre kerül; vagyis a feladatleírás csak 200-ig írja, de azért mégsem illik túlindexelni a tömböt ha nagy számot írnak be.)
Változókat célszerű úgy létrehozni, hogy a szükségesnél ne legyenek több helyen láthatóak, tehát ha a cikluson kívül nincs rá szükség (és ciklusiterációk között sem kell megmaradjon), akkor a cikluson belül.
Tehát egy for ciklussal akármelyik elemét tudom növelni és a végén kiíratni az egész tömböt egy lépésben ?
Így próbáltam megoldani, de ez nem működik.
const int MaxN = 100;
const int MaxX = 200;
int t[MaxN];
int x[MaxX];
int N;
cin >> N;
for(int i=0; i<N; i++)
{
cin >> x[i];
cin >> t[i];
}
Szerintem jelen esetben ennél egyszerűbb a dolog.
Mivel a kategóriák mindig 10-esével nőnek, elég egy 10-zel való osztás és megnézed az egész részét.
5 // 10 = 0, tehát a 0-9 kategóriába esik (tömb 0. indexet növeljük)
39 // 10 = 3, tehát a 30-39 kategóriába esik (tömb 3. indexet növeljük)
140 // 10 = 14, tehát a 140-149 kategóriába esik (tömb 14. indexet növeljük)
Legfeljebb a 200-at kell külön vizsgálni, ha az még tényleg beletartozik a 190-200 kategóriába.
Egyébként a példa bemenetnél mit jelent a 10, 20, 10, 100?
Úgy látom, a kimenet csak a második számokat veszi figyelembe.
További 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!