Losowanie bez powtórzeń

0

Witam, mam problem. Chciałbym wylosować 40 liczb w c++ z zakresu od 1 do 40. Liczby nie mogą się powtarzać i musi być 40 następujących po sobie losowań. Ktoś wie jak można takie coś zrobić???? Dziękuję za pomoc...

0

Ale chwilka.. Jeżeli dobrze się wysłowiłeś, to lepiej wymieszać te elementy w tablicy, bo raczej innego rozsądnego sposobu na to nie ma.
A do czego to Ci służy? Może da to się zrobić inaczej.
//EDIT:
Utwórz sobie vector z tymi liczbami i losuj w pętli liczbę od 0 do vector.size(), przenosząć liczbę o podanym indeksie.

0

Podaję kod dla jednego tasowania, dla większej ilości trzeba dodać jedną instrukcję.

#include <iostream> 
#include <ctime>
using namespace std; 
int main()
{
  const int mx=40,los=40; 
   int i,liczba_wylosowana,ile_los=0,tab[mx]; 
   time_t t;
   srand((unsigned) time(&t)); 
     for(i=0;i<mx;i++)tab[i]=i+1;
      while(ile_los<los)
       {
        liczba_wylosowana=rand()%mx ;
        swap(tab[ile_los],tab[liczba_wylosowana]);        
        ile_los++;
        }
        cout<<endl;
      for(i=0;i<los;i++)cout<<tab[i]<<" ";        
 cout<<"\npress ENTER";
 cin.sync();
 cin.get();   
}
0
#include <algortihm>
#include <ctime>
#include <cstdlib>
using namespace std;

/* inicjujemy generator liczb losowych (tylko raz!) */
srand(time(NULL));

/* wypełniamy tablice kolejnymi liczbami (tylko raz!) */
for (int i = 0; i < N; i++) tab[i] = i + 1;

/* losujemy kolejność (dowolna ilość razy, za każdym razem otrzymamy losowy zestaw) */
random_shuffle(tab, tab + N);

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