Kezdőoldal » Számítástechnika » Programozás » Ha van egy lista,tele számokka...

Ha van egy lista,tele számokkal,amik 1től 10000ig bármekkorák lehetnek,akkor mi a "legszebb" megoldás arra,hogy összeszámláljuk,hogy egy adott számjegyből mennyi darab van?

Figyelt kérdés
Úgy csináltam,hogy a listán egy for ciklussal végigmenve számjegyenként és helyiértékenként számoltattam össze,úgy hogy pl. 1es a 1es helyiértéken akkor számolja bele,ha a szám maradékosan osztva 1el 1-a maradéka. 1 es számjegyet 10es helyiértéken úgy számoltam,hogy a számot százzal osztva a maradék legalább tíz,de kisebb mint 20. És így tovább. A feladatban megadott tesztértékekkel leteszteltem,jó értékeket adott. Azonban a kód elég hosszú lett. Van-e gyorsabb mód rá,vagy nincs?Arra akarok kilyukadni,hogy lehet-e szebb kóddal?
2021. szept. 23. 23:04
1 2 3
 1/27 A kérdező kommentje:
Még egyszer,ha pl. a szám 22,akkor 2 1-es számjegy van benne. Az én kódomban ez úgy keletkezne,hogy 1áll az egyes,és egy a tízes helyiértékeken,és a kettőt összeadja a végén.
2021. szept. 23. 23:06
 2/27 Pelenkásfiú ***** válasza:
51%
Én mindenképp stringre castolnám a számokat és akkor csak végig kell menni rajtuk karakterenként.
2021. szept. 23. 23:08
Hasznos számodra ez a válasz?
 3/27 anonim ***** válasza:
57%
#2 ha stringgé alakítod, akkor 2x kell végig menned a számjegyeken, aminek semmi értelme.
2021. szept. 23. 23:11
Hasznos számodra ez a válasz?
 4/27 Pelenkásfiú ***** válasza:
40%
Mi az, hogy kétszer kell végigmennem?? A rengeteg maradékos osztás tán jobb? :D
2021. szept. 23. 23:17
Hasznos számodra ez a válasz?
 5/27 anonim ***** válasza:
100%
#1 Ez most hogyan jött ki neked, hogy a 22-es szám az két darab "1"-esből áll? Meg mit adsz össze a végén, nem értem? A 10-et és az 1-et? Az 11. Mi köze van ennek a 22-es számhoz?
2021. szept. 23. 23:26
Hasznos számodra ez a válasz?
 6/27 anonim ***** válasza:
21%

Egyszerű megoldás:


Egy tömbön kell végigmenned: minden egyes elemről szeretnéd tudni, hogy az hányszor szerepel a halmazban. Végigiterálsz, és ha a feltételednek megfelelő a tömb iterátoradik eleme, akkor pörgetsz egyet a számlálódon, ami default 0. A tömbbön mindenképpen végig kell menned legalább egyszer, hiszen nem tudhatod, hogy az utolsó, vagy akár a középső elem mi lehet.


Nem túl "light-weight" megoldás:


Szükséged van egy hashmap félére, vagy egy objectre aminek a kulcsa a tömb iterátoradik eleme, az értéke pedig az elem előfordulási száma, default 0. Vigyázni kell rá, hogy ne legyen duplikált kulcsod. Ez több erőforrást igényel, viszont átalakítod az inputodat, kiszeded a duplikációt, ráadásul minden elemről tudni fogod azt, hogy hányszor szerepel.


Csinálhatod C#-ban, pythonban, js-ben, javaban, a lényeg ugyan az: próbáld meg úgy megcsinálni, hogy a lehető legkevesebb erőforrást használd fel, aztán meg próbáld meg a hashmap megoldást, mert ott viszont rend születik az adathalmazban :)


Biztos van erre valami csoda matek megoldás is, de ahhoz hülye vagyok, majd azt mást leírja :)

2021. szept. 23. 23:37
Hasznos számodra ez a válasz?
 7/27 Pelenkásfiú ***** válasza:
52%

#6 De ő azt írta, hogy számjegyeket kell megszámolni, nem azt, hogy mondjuk a 123 hányszor van a listában.

De lehet, nekem van késő...

2021. szept. 23. 23:40
Hasznos számodra ez a válasz?
 8/27 anonim ***** válasza:
76%
Csak az eredeti leírást nézem. Van egy eredmény tömb, ami 10 elemű, 0-9ig (számjegyek). Nullázd ki minden elemét. A lista minden elemére (foreach ciklus a legszebb, ha tényleg egy lista), átmented egy átmeneti változóba. Do-While ciklus amíg az átmeneti változó nagyobb mint 0, megnöveled az eredmény tömb átmeneti változó osztásmaradék 10-zel indexű elemét egyel, majd az átmeneti változót egészosztod 10-el (ha nincs ilyen művelet, akkor az osztás után lefelé kerekíts, floor függvénnyel), az eredmény önmagában legyen tárolva. Ennyi. Ez 0-végtelen között bármire működik. Ha garantált, hogy a minimum érték 1, akkor a do-while helyett sima while ciklus is jó, az nullára nem fog jól működni, de ennyi apróság belefér, hogy jól működjön rá.
2021. szept. 23. 23:43
Hasznos számodra ez a válasz?
 9/27 2*Sü ***** válasza:
86%

És milyen programnyelvről van szó? Javascriptben kb. ennyi:

[link]

2021. szept. 23. 23:48
Hasznos számodra ez a válasz?
 10/27 anonim ***** válasza:
18%
Hmm, tényleg igazad van bocsánat. Bár a lényegen nem változtat, csak egy extra lépést kell beiktatni: a tömb eleme is egy tömb lesz ha a lengthje 1-nél nagyobb.
2021. szept. 23. 23:48
Hasznos számodra ez a válasz?
1 2 3

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

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!