Szerző Téma: 50 integer változó közül hogyan lehet a top 10-et kiválasztani?  (Megtekintve 1038 alkalommal)

Nem elérhető nyomo

  • 159
    • Profil megtekintése
50 integer változó közül hogyan lehet a top 10-et kiválasztani?
« Dátum: 2016. szeptember 03. - 14:38:44 »
0 Show voters
Van 50 változó (i[50];), aminek más más érték vagy esetleg megegyező értékek is lehetnek és ebből szeretném a 10 legnagyobb értékű változó értékét és változó számát megtudni([?]).
pl:

i[1] = 234;
i[2] = 321;
i[3] = 20;
.......
i[49] = 234;
i[50] = 200;

 
A topp három eredmény ez esetben így nézzen ki.
1. i2(321)
2. i1(234)
3. i49(234)
« Utoljára szerkesztve: 2016. szeptember 03. - 17:37:11 írta nyomo »

50 integer változó közül hogyan lehet a top 10-et kiválasztani?
« Válasz #1 Dátum: 2016. szeptember 03. - 21:47:51 »
+1 Show voters
Szia!
Én úgy csinálnám hogy létrehoznék még egy változót ami ez esetben 10 értéket tárol.
Aztán kell egy ciklus ami lefut annyiszor ahány elem van a változódban.
Majd ha talált egy értéket berakja az első helyre, de előtte eldönti egy feltétellel hogy az a szám illik-e oda vagy sem.
Ha esetleg van egy szám az első helyen akkor megnézi a második helyet. [...]
Ha eléri a 9. helyett és a 9. helyen lévő szám még mindig nagyobb akkor bekerül a 10. helyre és a ciklus véget is ért. (megszakítás)
Bár ha lehetséges sql-el táblában tárolnám az adatokat én onnan könnyebb lenne \"sortolni\" / szűrni az adatokat.
+++
Ilyen műveletekhez ajánlom pl a buborék rendezést, melynek lényege, hogy a számokat sorba rendezze.
!Ez az algoritmus a változón belül végzi el a sorrendbe állítást:
Értsd:
x[5]={2,1,3,5,4}; ------> x[5]={1,2,3,4,5};
példa script:
 

new a[9] = {2,3,6,1,9,4,8,5,7};
new tmp;
new i = sizeof(a) - 1;
new uj_i;
while (i >= 1) {
        uj_i = 0;
        for (new j = 0; j < i; j++) {
        if (a[j] > a[j + 1]) {
                // csere
                tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
                uj_i = j;
                }
        }
        i = uj_i;
}

 
Vagy még ez a fajta rendezés is hasznos lehet: <a href=\"http://forum.sa-mp.com/showthread.php?p=1085586&highlight=quickSort\">link</a>

Nem elérhető nyomo

  • 159
    • Profil megtekintése
50 integer változó közül hogyan lehet a top 10-et kiválasztani?
« Válasz #2 Dátum: 2016. szeptember 04. - 02:18:54 »
0 Show voters
A példádnak köszönhetően sikerült.  ;D Köszi!
(Lehet rosszul forgalmaztam, de még pontosan én sem tudtam mit, hogy akarok.  Nem csak sorba rendezni akartam és a top 10 értékeket megtudni, hanem azt is, hogy miből van a legtöbb. Mondjuk a 3 szám a leggyakoribb és abból van 25db, aztán a 14 szám amiből van 21db, stb. Ehhez enumot hoztam létre i[50] változó helyett, hogy tudjam a számot is tárolni és a példád is ehhez alakítottam, így minden jó már.  :) )
« Utoljára szerkesztve: 2016. szeptember 04. - 02:20:32 írta nyomo »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal