• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ - Ile różnych liczb w ciagu

Object Storage Arubacloud
0 głosów
810 wizyt
pytanie zadane 28 stycznia 2018 w C i C++ przez CatNet Nowicjusz (220 p.)

Dzień dobry,

Mam do napisania program, który wypisze ile jest różnych liczb w ciągu.

Oto mój kod:

#include <iostream>
using namespace std;


int main()
{
    ios_base::sync_with_stdio(false);
    int lim=0,out=0,i=0;

    int r[lim];

    cin >> lim;


    while (i<lim)
    {
        i++;
       cin >> r[i];

       if(r[i]!=r[i-1])
        out++;

       //if (r[i] != r[i-1])
           //out = out+1;
        //else
            //out = out;



        lim=lim-1;
    }

    cout << out;
return 0;
}

Czasami zwraca odpowiedź dobrze, ale zdaje się że obliczenia ucina w pewnym momencie. Czy jest to związanie z licznikiem liczb?

Dziękuję za uwagę.

2 odpowiedzi

0 głosów
odpowiedź 28 stycznia 2018 przez LightInWindow Użytkownik (720 p.)
Dlaczego tworzysz tablicę jednowymiarową o długości 0 ?
komentarz 28 stycznia 2018 przez CatNet Nowicjusz (220 p.)
Nie rozumiem, ta wartość jest później zmieniona, a nawet jeżeli tablica będzie miała wartość np. 100000 to nic nie zmnienia :/
komentarz 28 stycznia 2018 przez Secrus Nałogowiec (32,880 p.)
Spróbuj tą tablicę vectorem zamienić. Masz dynamiczną ilość danych w vectorze, więc  odpada potrzeba wpisywania
komentarz 29 stycznia 2018 przez LightInWindow Użytkownik (720 p.)
    int lim=0,out=0,i=0;
 // Tutaj tworzysz statycznie tablice o lim elementach
//  czyli rezerwujesz mniejsce na lim intów 
    int r[lim];
 
// a tutaj po prostu za zmienna przypisujesz jakąś liczbę
// która jest niezależna od r, liczba elementów r się nie zmieni
    cin >> lim;

 

1
komentarz 29 stycznia 2018 przez LightInWindow Użytkownik (720 p.)
A co do pytania, to zobacz, że w pętli na początku inkrementujesz zmienną "i" i dekrementujesz zmienną lim, dlatego "ucina" Ci program gdy wpiszesz połowę z zadanej ilości liczb. Poza tym Twój algorytm źle działa dla ciągu np. 1,2,2,1,2
0 głosów
odpowiedź 29 stycznia 2018 przez mokrowski Mędrzec (155,460 p.)

Dlaczego skazujesz się na większą złożoność obliczeniową niż to jest konieczne? To niewiele da jeśli będziesz optymalizował niewydajny algorytm który ma gromadzić i wielokrotnie przeglądać kontener (lub sortować ... bo pewnie na to zaraz wpadniesz :-/). Użyj std::unordered_set lub std::set (w ostateczności). Będziesz miał elementy unikalne i wystarczy że zwrócisz tylko wielkość tego kontenera.

Zerknij jak już sam zrobisz użyjesz std::unordered_set/std::set :

#include <unordered_set>
#include <iostream>
#include <algorithm>
#include <iterator>

int main() {
    size_t lim;
    std::unordered_set<int> mySet;
    using istr = std::istream_iterator<int>;
    using iiter = std::insert_iterator<decltype(mySet)>;

    std::cin >> lim;
    std::copy_n(istr(std::cin), lim, iiter(mySet, mySet.begin()));
    std::cout << mySet.size();
}

 

Podobne pytania

+1 głos
3 odpowiedzi 1,946 wizyt
pytanie zadane 17 czerwca 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 112 wizyt
pytanie zadane 25 listopada 2020 w Algorytmy przez wojtek_suchy Mądrala (6,880 p.)

92,568 zapytań

141,420 odpowiedzi

319,624 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...