3. největší hodnota v poli – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

3. největší hodnota v poli – C / C++ – Fórum – Programujte.com3. největší hodnota v poli – C / C++ – Fórum – Programujte.com

 

Jan Kalina
~ Anonymní uživatel
2 příspěvky
22. 2. 2013   #1
-
0
-

Dobrý den, potřeboval bych poradit s algoritmizací. Program by mi měl vyhledat 3. největší hodnotu z libovolného dvourozměrného pole. Napadla mě možnost se sortem, ale potřeboval bych to udělat bez něj. Jedná se o jazyk C++. Děkuji za případné rady.

Nahlásit jako SPAM
IP: 217.117.213.–
KIIV
~ Moderátor
+43
God of flame
22. 2. 2013   #2
-
0
-

pouziva se vicemene select sort... kdy ho projedes jen tolikrat, kolikatou hodnotu potrebujes... (nebudes radit vse kdyz nemusis)

pripadne se da i udelat objekt, kterymu se zada pocet polozek a on se postara o vlozeni na spravne misto (zalezi na tom jestli c++ nebo jen C)

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ingiraxo+15
Grafoman
22. 2. 2013   #3
-
0
-

Btw pokud chceš nějaký vlastní řešení, tak jsem se pokusil udělat něco, kde není žádnej sort, jen vyhledá 3 největší a ty seřadí :) nevim jestli je to rychlejší než select sort (nezkousel jsem)

#include <iostream>
#include <time.h>

struct Find3Max
{
public:
    Find3Max(int* arr, const int length, int*& result)
    {
        if (!arr) return;

        result = new int[3];

        for (int i = 0; i < length; ++i)
        {
            if (*(arr + i) > *(result + 2))
            {
                if (!existsValue(result, 3, *(arr + i)))
                {
                    *(result + 2) = *(result + 1);
                    *(result + 1) = *result;
                    *result = *(arr + i);
                    sort3(result);
                }
            }
        }
    }

private:
    void swap(int& a, int& b) {
        int tmp = a;
        a = b;
        b = tmp;
    }
    bool existsValue(int* arr, const int length, const int value) const {
        for (int i = 0; i < length; ++i)
            if (*(arr + i) == value) return true;
        return false;
    }
    void sort3(int* arr) {
        if (*arr < *(arr + 1)) swap(*arr, *(arr + 1));
        if (*(arr + 1) < *(arr + 2)) swap(*(arr + 1), *(arr + 2));
        if (*arr < *(arr + 1)) swap(*arr, *(arr + 1));
    }
};

int main ()
{
    srand((unsigned int) time(0));

    const int LENGTH = 10;
    int arr[LENGTH];
    for (int i = 0; i < LENGTH; ++i) {
        *(arr + i) = rand() % 100;
    }
    int* result = 0;
    Find3Max(arr, LENGTH, result);

    for (int i = 0; i < 3; ++i)
        std::cout << *(result + i) << ", ";

    return EXIT_SUCCESS;
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Filip
~ Anonymní uživatel
121 příspěvků
22. 2. 2013   #4
-
0
-

stačí si to ukladať do stromu a následne vypísať tretí prvok

Nahlásit jako SPAM
IP: 188.112.79.–
Jan Kalina
~ Anonymní uživatel
2 příspěvky
23. 2. 2013   #5
-
0
-

Děkuji moc, oba příspěvky velice pomohli. :)

Nahlásit jako SPAM
IP: 217.117.213.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý