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
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);