Losowanie liczb i niepowtarzalność

0

Piszę program, w którym potrzebne mi jest losowanie liczb, wszystko działa dobrze, ale liczby się powtarzają.
Próbowałem kręcić z tablicami ale coś mi nie wychodzi :( Z góry dzięki za pomoc.
Oto fragment kodu, który ma być odpowiedzialny za losowanie i niepowtarzalność liczb:

int pytanka[10];
while(true)
                     {
                             int licznik_pytan;
                             pytanie = rand() % 9+1;
                             for (licznik_pytan=1; licznik_pytan<=10; licznik_pytan++)
                             {
                                 if(pytanka[licznik_pytan]==pytanie) break;
                                 else if(pytanka[licznik_pytan]==false)
                                 {
                                      pytanka[licznik_pytan]=pytanie;
                                      break;
                                 }
                             }
                     if(pytanka[licznik_pytan]==pytanie && pytanka[licznik_pytan+1]==false) break;
                     } 
0

Możesz zrobić tak: losujesz liczbę i zanim wrzucisz ją do tablicy sprawdzasz (wyszukiwanie binarne, gotowy algorytm w stlu) czy nie ma tam liczby o takiej samej wartości.

0

Fajnie, ale nie czaje... Nie da się czegoś naprawić w moim kodzie?

0

Masz dwa mozliwe rozwiazania:

  • jesli znasz zakres tych losowanych liczb, to:
  1. tworzysz tablice o rozmiarze N typu boolean i ustawiasz wszedzie false
  2. losujesz liczbe (i)
  3. sprawdzasz, czy w tablicy na i-tej pozycji nie ma true
  4. jesli nie, to ok - to jest to Twoja nowa liczba (musisz ustawic na tej pozycji true)
  5. jesli tak, to wracasz do pkt nr 1
  • jesli nie znasz zakresu
  1. Tworzysz TreeSet
  2. Analogicznie, jak powyzej, ale wrzucasz liczby do tego TreeSeta / sprawdzasz, czy się tam znajdują
0

Tylko że przy dużym n losowanie końcowych wartości może trochę zająć (zanim trafi się taka, której jeszcze nie było). Możesz też stworzyć tablicę i wypełnić ją wartościami z zakresu, potem ją pomieszać i iterować po kolei.

0

Ja proponuję:

  1. Zadeklarować tablicę dynamiczną i zapełnić wartościami,
  2. Losować wartość z zakresu ( 0 - [aktualna długość tablicy])
  3. Po wylosowaniu zastąpić ostatni element tablicy z wylosowanym i uciąć tablicę o 1
  4. gdy długość tablicy = 0 -> gotowe

1 użytkowników online, w tym zalogowanych: 0, gości: 1