PDA

Visualizza la versione completa : [C] Generare numeri casuali non ripetuti con rand()


maximus123
19-01-2011, 19:06
ciao ragà,volevo chiedervi una cosa:
ho dichiarato 8 variabili di tipo int e ogni variabile viene generata tramite la funzione rand().Ogni variabile però deve essere diversa una dall'altra,per fare ciò devo utilizzo glli if facendo if(a==b),ecc ecc,oppure c'è qualche altro metodo??

ciaooo e grazie in anticipo

Alex'87
19-01-2011, 19:23
Ma anziché usare 8 variabili non puoi usare un array di 8 elementi? :stordita:

maximus123
19-01-2011, 19:32
si a questo ci avevo pensato,ma mi resta sempre il problema che generando 8 numeri e memorizzandoli nell'array può capitare qualcuno uguale...

deleted_29
19-01-2011, 19:45
Originariamente inviato da maximus123
si a questo ci avevo pensato,ma mi resta sempre il problema che generando 8 numeri e memorizzandoli nell'array può capitare qualcuno uguale... bhè la scelta "normale" sarebbe quella di usare una "vera" funzione rand, e non quella "banale".

altra possibilità è, semplicemente, quella di verificare (nel vettore) che non ci siano elementi duplicati prima di "accodarne" uno, qualora ti servano tutti distinti.

in generale anche i pseudocasuali possono essere identici (prova a lanciare un dado, può facilmente uscirti lo stesso numero più volte).

però, in realtà, quello che scrivi potrebbe effettivamente capitare

maximus123
19-01-2011, 19:47
a me tutto questo serve perchè devo fare la distribuzione di 8 carte e le carte le memorizzo in un array...quindi le carte devono essere tutte diverse l'una dall'altra e per forza devono essere diversi i numeri generati...

Celebron
19-01-2011, 20:04
come ti hanno suggerito basta che ogni volta che generi un nuovo valore controlli che non sia presente nell'array (usa l'array, non 8 variabili diverse)

qualcosa tipo



for (i=0; i<8; i++){
ok = false;
while(!ok){
array[i] = numeroRandom();
ok = true;
for(j=0; j<i; j++){
if(array[i] == array[j]) ok = false;
}
}
}

per fare una roba proprio banale

Mad_al
19-01-2011, 20:07
prova a fare un rand con un range di seed abbastanza ampio.

maximus123
19-01-2011, 20:17
ho risolto con il metodo proposto da Celebron...

grazie mille a tutti ragà :)

Loading