c++ funkcja losujaca bez powtórzeń problem

c++ funkcja losujaca bez powtórzeń problem
OG
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 12 lat
  • Postów:16
0

witam,

Mam funkcję której zadaniem jest losowanie nr pytania z pośród
elementów wektora( tzn od 1 wzwyż ,element zerowy jest zarezerwowany)
Żaden nr nie moze sie powtarzać.

Niestety pętla while która ma przed tym chronić
nie spełnia swojego zadnia :( co robię nie tak?

Kopiuj
 
int nr_pytania[3]={0,0,0}               ;              
                    srand ( time(NULL) )                    ;    
                        for(int i=0;i<3;i++)  
                            {
                              nr_pytania[i]= 1+(rand()%(pytania.size()-1));                                    
                              
                              int j=-1           ;
                                         while( j<3 )
                                             {
                                               j++;
                                               if(nr_pytania[i]==nr_pytania[j] && i!=j)
                                                  {nr_pytania[i]= 1+(rand()%(pytania.size()-1));j=0;}
                                             }     
                                             
                            }       
                   for(int i=0;i<3;i++)
                            {cout <<"a: "<<nr_pytania[i]<<" ";}



Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
0

Pewnie są lepsze rozwiązania, ale możesz poprzestawiać wektor pytań za pomocą std::random_shuffle i wybrać tyle, ile potrzebujesz.


"(...) otherwise, the behavior is undefined".
edytowany 1x, ostatnio: Endrju
Xitami
  • Rejestracja:ponad 20 lat
  • Ostatnio:około rok
0
Kopiuj
t = jakas liczba pierwsza > p.size() 
for ( j=0, i=1; i<p.size ()-1; i++) {
    j = ( j + t ) % (p.size () - 1);
    p[j+1];
}
edytowany 1x, ostatnio: Xitami
OG
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 12 lat
  • Postów:16
0

znalazłem błąd (po 3h ale jednak)

Kopiuj
nr_pytania[i]= 1+(rand()%(pytania.size()-1));j=0; //powinno być j=-1; 

Może komuś się przyda :)

Dziękuję za cenne rady- postaram się wykorzystać w następnych funkcjach :)

matek3005
  • Rejestracja:około 15 lat
  • Ostatnio:prawie 5 lat
  • Postów:358
1
ognistysztorm napisał(a):

Dziękuję za cenne rady- postaram się wykorzystać w następnych funkcjach :)
to dam ci jeszcze jedną radę tym razem bezcenną, zacznij formatować porządnie kod to znalezienie takiego błędu (i wielu innych) być może potrwałoby kilka minut, a nie godzin.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.