Witam,
ma ktoś może jak ulepszyć poniższy algorytm ?
Ja wymyśliłem najprostszą metodę.
Losowana jest liczba z konkretnego przedziału, i umieszczona w tablicy tab, o ile nie wystąpiła wcześniej w tej tablicy.
lista kroków :
0 liczba wylosowana jest wpisywana do tablicy tab
1 wylosowana liczba jest wpisany o ile nie istenieje w tab[0]
2 wylosowana liczba jest wpisany o ile nie istenieje w tab[0] && tab[1]
...
aż zostanie wylosowane n liczb
//funkcja zwraca wskaźnik do tablicy n licz calkowitych wylosowanych z zakresu podanego przez użytkonika.
//Np losowanie dużego lotka : n = 6, zakresdolny = 1, zakresgorny = 49
#include <stdio.h>
#include <stdlib.h>
#include <time.h> // srand()
int* funkcjalosuj(const int n, const int zakresdolny, const int zakresgorny)
{
int *tab;
int i; // iterator petli for
srand(time(NULL)) ; //generuje za ka¿dym razem inna liczbe
int liczbaLosowa;
int zostalawylosowana = 0;
// tab - tablica wylosowanych elementow
tab = calloc(n, sizeof(int)); // tworzymy tablice n elementowa typu int
for(i = 0; i < n; ++i)
{
do{
liczbaLosowa = ((rand() % ((zakresgorny - zakresdolny)+1)) + zakresdolny);
if( i > 0){
int ip;
for(ip = 0; ip < i; ++ip)
if( liczbaLosowa == tab[ip]) zostalawylosowana = 1;
}
}while(zostalawylosowana != 0);
tab[i] = liczbaLosowa;
}
printf("\ntab[%i] = %i", i, tab[i]);
return tab;
}