View Full Version : random
s.maximus
13-11-2004, 18:15
come faccio a generare in c n numeri casuali SENZA la possibilità che vengano ripetuti?:
randomize();
for (i=y;i<=x;i++)
printf("\n%d",random(90)+1);
Ziosilvio
13-11-2004, 20:24
Originariamente inviato da s.maximus
come faccio a generare in c n numeri casuali SENZA la possibilità che vengano ripetuti?
Non puoi.
Né in C, né in nessun altro linguaggio.
Se la sequenza è davvero casuale, allora non puoi fare nessuna previsione sul termine successivo basandoti sui precedenti: in particolare, non puoi essere certo che non sarà uguale a uno di quelli già usciti.
Tutt'al più, puoi generare a caso una permutazione di un insieme casuale di n numeri, purché n non sia troppo grande.
randomize();
for (i=y;i<=x;i++)
printf("\n%d",random(90)+1);
randomize e random non sono standard.
Se vuoi creare un programma C standard, devi usare srand e rand.
Fenomeno85
13-11-2004, 23:16
l'unico modo per sperare che il prossimo numero non sia lo stesso è avere un numero di valori grandissimo :)
~§~ Sempre E Solo Lei ~§~
Si può tentare di fare una estrazione senza reinbussolamento...
/* estrazione senza reimbussolamento di m elementi
su una popolazione di n elementi */
int vettore_casuale(int *v, int m, int n)
{
char *v2;
int i, j;
if(m > n)
return 1;
v2 = malloc(sizeof(char)*n);
memset(v2, 0, sizeof(char)*n);
for(i=0; i<m; i++)
{
v[i] = rand()%(n-i) + 1;
j = 0;
while(v[i] > 0 )
{
if(v2[j++] == 0)
v[i]--;
}
v2[j-1] = 1;
v[i] = j;
}
free(v2);
return 0;
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.