c - Random Array with no repeated numbers -


so trying create random array of 5 elements, elements should filled numbers 1 6 , shall not repeat, can't tell logic wrong.

void gennumber(int vet[]){    int max, i, j, atual;    srand(time(null));     max = 7;    (i=0;i<5;i++){       vet[i] = rand() % max;       while(vet[i] == 0){          vet[i] = rand() % max;       }        for(j=0;j<i;j++){          atual = vet[j];          while((vet[i] == atual)||(vet[i] == 0)){             vet[i] = rand() % max;             atual = vet[j];          }       }    } } 

update: fixed

void gennumber(int vet[]){ int max, i, j; srand(time(null));  max = 7; (i=0;i<5;i++){     vet[i] = rand() % (max-1) + 1;      for(j=0;j<i;j++){         while(vet[j] == vet[i]){             vet[i] = rand() % (max-1) + 1;             j = 0;         }     } } } 

the logical flaw in way produce new random number when duplicate found.

imagine have vel = {1,2,0,0,0,...} , trying find number vel[2]. if randomly draw 2, you'll find it's there , draw again. if draw 1 time won't notice, because compare last value seen, 2 in example. you'd vel = {1,2,1,...}.

"solution": every time draw new random number have compare against all numbers in list.

another way of solving 1 tried outline in comments: have keep information numbers still valid draw somewhere. can either use "output" array you're doing now, or can use store "remove" entry once drawn.


Comments

Popular posts from this blog

php - Invalid Cofiguration - yii\base\InvalidConfigException - Yii2 -

How to show in django cms breadcrumbs full path? -

ruby on rails - npm error: tunneling socket could not be established, cause=connect ETIMEDOUT -