Kezdőoldal » Számítástechnika » Programozás » [C++] Hogyan tudom megoldani,...

[C++] Hogyan tudom megoldani, hogy kiírja a programom azt, hogy hányféle különböző adat van a tömbömben?

Figyelt kérdés

Például:


van a darab[5] tömböm, aminek elemei:

darab[0]=2;

darab[1]=7;

darab[2]=2;

darab[3]=9;

darab[4]=7;


for(int i=0; i<5; i++)

{

if(darab[i]== ????)

{

darab++;

}

}



cout<<darab<<" ilyen elemunk van!"<<endl;


2016. dec. 24. 09:19
1 2
 1/16 A kérdező kommentje:

Bocsánat, nem azt kell kiírnom, hogy hányféle különböző, hanem hogy hányféle azonos adatom van.


(Ez nem házi feladat, hanem gyakorlok az ünnepek alatt)

2016. dec. 24. 09:20
 2/16 anonim ***** válasza:

A ????-lek helyére miért nem írsz be egy számot, amit keresel?


(vagy kérd be a felhasználótól, hogy melyik számra kiváncsi és azzal történjen az összehasonlítás)

2016. dec. 24. 09:26
Hasznos számodra ez a válasz?
 3/16 A kérdező kommentje:

Mert egy olyan tesztelő ellenőrzi a programot, aminek a bemeneti adatait én nem látom, és 20 különböző esetet letesztel.


Nem tudom, hogy épp mikor milyen adatokkal dolgozik, ezért minden lehetséges esetre működnie kell a programomnak. Ha 0 azonos, ha 10, ha 100 azonos adatom van. Jelen esetben csak 1 konkrét példát írtam, de ha a darab tömbnek 100 eleme van, és mondjuk 70 azonos, arra is ki kellene a 70-et írnia.

2016. dec. 24. 09:29
 4/16 A kérdező kommentje:
Már megvan.
2016. dec. 24. 10:42
 5/16 anonim ***** válasza:

Ez a kód teljesen értelmetlen.

Hol tömbként, hol számlalóként próbálod kezelni ugyanazt a változót.

2016. dec. 24. 11:45
Hasznos számodra ez a válasz?
 6/16 anonim ***** válasza:

Nem tudom most pontosan mit is akarsz. Megszámlálni, hogy egy adott szám hányszor fordul elő a tömbben? Berakod egy függvénybe, nyomsz rá egy int paramétert, amit a ??? helyére behelyettesítesz, majd a főprogramban bekéred a keresett számot, és meghívod vele a függvényt. Kész :D


Egy pöppet érdekesebb kérdés (és először azt hittem erre vagy kíváncsi), hogy hogyan lehet a tömbben szereplő összes számra meghatározni, hogy hányszor szerepel (tehát nem csak egy megadott számra, hanem a tömb összes elemét összegezni). Ez már egy picit érdekesebb, és nem vagyok teljesen biztos, hogy mi lenne a leggyorsabb megoldás. A legkézenfekvőbb megoldás az lenne, ha létrehoznánk egy map szerkezetet, amit az elemekkel indexelünk, és a darabszámukat fogjuk értékként tárolni. Eztán csak végigiterálunka tömböt egyszer, és feltöltjük a mapet az elemeknek megfelelően. Egy alternatív elképzelés egy lista létrehozása, amin többször végigiterálunk. Elsőkörben a tömb első elemét kijelöljük keresett értéknek, és ahogy végigiterálunk a tömbön, ha keresett értéket találunk, akkor megnöveljük a hozzá rendelt számlálót (ehhez nyilvántarthatunk egy másik tömböt), ha pedig nem keresett elemet, azt hozzáfűzzük a szóban forgó lista végéhez. Miután végigiteráltunk a tömbön, a listában minden elem benne lesz, a keresett elemet kivéve. Eztán a procedúrát a listára ismételjük meg, az első elemet keresett elemmé tesszük, és minden keresett elemnél növeljük a számlálót, valamint eltávolítjuk azt a listából. Addig iterálunk végig az egyre csökkenő listán, amíg elfogy. Valószínűleg ez lényegesen lassabb lenne, mint a map-ben megtalálni a kulcs-érték párokat, de azért a maga módján ötletes.

2016. dec. 24. 16:09
Hasznos számodra ez a válasz?
 7/16 A kérdező kommentje:

Elmondom mit szeretnék.


Adott egy N elemű tömb, amiknek feltöltjük az elemeit.

Az N legyen jelen esetben 5, tehát 5 adatot várunk el a felhasználótól.

A tömb első eleme: 2

A tömb második eleme: 7

A tömb harmadik eleme: 2

A tömb negyedik eleme: 9

A tömb ötödik eleme: 7


Ez után, amit nekünk ki kellene íratni, az 1 darab szám, ami azt adja meg, hogy az előbb leírt 5 szám közül hány különböző van egymástól.

Tehát jelen esetben 3 a megoldás, mivel van "2","7","9".

2016. dec. 24. 16:48
 8/16 anonim ***** válasza:
Áhhá. Hát ezt is lehet map-el csinálni, ahogy fentebb írtam, de a legcélszerűbb adatszerkezet a set lenne. Abba be tudod pakolni az elemeket ismétlődés nélkül, aztán a set hosszát lekérdezve megkapod a különböző elemek számát.
2016. dec. 24. 17:40
Hasznos számodra ez a válasz?
 9/16 anonim ***** válasza:

Egyszer meg fogom tanulni a C++-t, de addig muszáj a stackoverflowról összeollózni a válaszokat.


std::set<int> darab_set(begin(darab), end(darab));

std::cout << darab_set.size() << ' ilyen elemünk van!\n';

2016. dec. 24. 19:13
Hasznos számodra ez a válasz?
 10/16 anonim ***** válasza:

Ha csak egy fajta elemre kell, akkor számold meg egy ciklusban (majdnem úgy, ahogy csináltad).


Ha mindegyikre kell, akkor rendezd be a tömböt, és keress benne azonos elemből álló sorozatokat.

2016. dec. 24. 23:17
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!