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

losowanie bez powtórzeń - inny sposób(?)

Object Storage Arubacloud
0 głosów
399 wizyt
pytanie zadane 9 października 2018 w C i C++ przez Gadzic Nowicjusz (170 p.)

Witam!

Chciałem napisać program do losowania 5 liczb bez powtórzeń. Wiem, że jest już trochę wątków dotyczących tego, jednak moje próby rozwiązania zdają mi się być inne.

Zacząłem rozwiązywać swoje zadanie nie analizując, żadnych przykładów tylko szukając swojego rozwiązania. Dlatego może nie jest ono najlepsze i ciężko skalowalne jeżeli w ogóle, ale skoro już zacząłem to chciałbym dowiedzieć się czemu nie działa, bym lepiej mógł zrozumieć temat. Wylosowane liczby wciąż się powtarzają.

Z góry dziękuję wszystkim pomocnym tu osobą - jesteście super! yes

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int losuj()
{
    int liczba;
    liczba=((rand()%10)+1);
    return liczba;
}

int main()
{
    int liczba;
    int tablica [5];
    int i = 0;
    srand(time(NULL));

    do
    {
        tablica[i]=0; //chcialem wyzerowanie tablicy do porownywania wynikow
        i++;
    }
    while (i<5);

    i=0;
    do
    {
        liczba = losuj();

        while (liczba==tablica[0] && liczba==tablica[1] && liczba==tablica[2] && liczba==tablica[3] && liczba==tablica[4])
        {
                liczba = losuj();
        }
        tablica[i] = liczba;
    i++;
    }
    while (i<5);

    i=0;
    do
    {
        cout<< tablica[i] << endl;
        i++;
    }
    while (i<5);
}

 

1 odpowiedź

+1 głos
odpowiedź 9 października 2018 przez criss Mędrzec (172,590 p.)
liczba = losuj();        

while (liczba==tablica[0] && liczba==tablica[1] && liczba==tablica[2] && liczba==tablica[3] && liczba==tablica[4])
        {
                liczba = losuj();
        }

Nie ma sensu porównywać ze wszystkimi liczbami z tablicy podczas losowania np. drugiej liczby. Wystarczy, że porównasz tylko z pierwszą. Przy losowaniu trzeciej porównaj tylko z pierwszą i drugą itd.. I nie pisz takich wielkich warunków. Jakbyś miał tysiąc liczb to byś pisał przez tydzień taki warunek? Albo pisał jakiś skrypcik który zrobi to za ciebie? Od tego są pętle.
Poza tym - mogłeś użyć do..while zamiast jedno losuj() przed pętlą a drugie wewnątrz.

No i sam warunek też jest skopany - tzn. to powinny być alternatywy (operator || ) a nie koniunkcje (operator && ).

komentarz 9 października 2018 przez Gadzic Nowicjusz (170 p.)
Dzięki za podpowiedzi! Warunek oczywiście już działa. Wiem że warunek jest toporny, ale z początku chciałem, żeby działał jakkolwiek, a teraz postaram się go zoptymalizować. Co do porównywania tylko z poprzednimi liczbami to było to dla mnie oczywiste, niestety nie oczywistym dla mnie jest jak to napisać ;) Pozdrawiam!

Podobne pytania

0 głosów
2 odpowiedzi 460 wizyt
pytanie zadane 14 stycznia 2018 w C i C++ przez Maciej3206 Użytkownik (570 p.)
0 głosów
2 odpowiedzi 8,520 wizyt
pytanie zadane 5 września 2017 w C i C++ przez Adampio Początkujący (310 p.)
0 głosów
3 odpowiedzi 786 wizyt
pytanie zadane 28 czerwca 2018 w JavaScript przez Tomasz Ozi Orzech Początkujący (300 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...