ciao a tutti
esiste una funzione in c, che mi permatta di generare un numero casuale fra 0 e 40 senza occorrenze, ovvero senza che generi numeri identici.
grazie in anticipo
ciao a tutti
esiste una funzione in c, che mi permatta di generare un numero casuale fra 0 e 40 senza occorrenze, ovvero senza che generi numeri identici.
grazie in anticipo
Ad Maiora
te lo spiego in linea teorica: allora tu fai un array di 41 elementi da 0 a 40;
ripeti questo ciclo ogni estrazione
sapendo che:
N è il numero di elementi nell'array
...
estratto = random(N)
scrivi estratto
porta tutti gli elementi negli indici tra estratto e N indietro di un indice, cioè:
n=N-1codice:for i=estratto i<N-1 i++ array[i]=array[i+1]
...
l'ho scritto molto velocemente, se non capisci qualcosa chiedi![]()
![]()
Originariamente inviato da gygabyte017
te lo spiego in linea teorica: allora tu fai un array di 41 elementi da 0 a 40;
ripeti questo ciclo ogni estrazione
sapendo che:
N è il numero di elementi nell'array
...
estratto = random(N)
scrivi estratto
porta tutti gli elementi negli indici tra estratto e N indietro di un indice, cioè:
n=N-1codice:for i=estratto i<N-1 i++ array[i]=array[i+1]
...
l'ho scritto molto velocemente, se non capisci qualcosa chiedi![]()
![]()
non è molto efficiente spostare tutte le volte un gran numero di elementi dell'array...
E' possibile procedere inceve ad un semplice scambio dell'elemento estratto e dell'ultimo elemento e ridurre di 1 ogni volta l'intervallo di estrazione:
codice:#include <stdio.h> #define MAX 50 int lim, estratto, i, k, tab[MAX], temp; main() { /* inizializzo l'array per la ricerca casuale */ for (i=0; i<MAX; i++) tab[i]=i; /* cerco elemento casuale tra i primi lim valori di tab */ lim=MAX; for (i=0; i<MAX; i++) { k=rand()%lim; /* scelgo elemento casuale dell'array */ estratto= tab[k]; /* ne estraggo il valore, questo è il risultato dell'estrazione! */ printf("%d) %d\n",i,estratto); tab[k]=tab[lim-1]; /* sposto ultimo elemento al posto di quello appena estratto */ lim--; /* ignoro ultimo elemento per la prox estrazione */ } }
Leggi il REGOLAMENTO!
E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
Drugo
in pratica dai gestire un mazzo di 40 carte, deve estrarre le carte a random dal mazzo[40], è la strada giusta???
grazie in anticipo![]()
Ad Maiora
il codice che ti ho indicato fa quello che chiedi... il tuo mazzo è l'array "tab" la carta estratta è "estratto"
Leggi il REGOLAMENTO!
E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
Drugo
sto cercando di fare il sudoku e vorrei avere il codice per estrare un numero casuale da un'array numerico
PS:come quando si estrae dalla tombola i numeri (voglio dire che quando lo tolgo per quel posto non puo' comparire due volte !)
Hai risposto ad un thread di piu' di 2 anni fa ...!
Se devi proporre un quesito, apri un nuovo thread e spiega chiaramente quello che vuoi ...
P.S. Dai un'occhiata al regolamento ...
No MP tecnici (non rispondo nemmeno!), usa il forum.
volendo ci sono metodi più brutti ma altrettanto efficaci:
int valori[MAX];
bool controlli[MAX];
int estraiValore;
for int i; i<MAX; i++
valori[MAX]=i;
controlli[MAX]=0;
//inizializza i vettori
for int i; i<MAX; i++
estraiValore=random(MAX);//non conosco la sintassi di random in c
if (!controlli[estraiValore)) print estraiValore; controlli[estraiValore]=1;
così sei certo che estrae un numero una sola volta, fa schifo come soluzione, ma non ci sono eccessivi cicli da fare![]()
alloras scusami ma portreste andare sul trehad di Flash :
Array casuale o random
Li ho postato quello che voglio !
Ma tu vuoi scriverlo in C?
Cosa c'entra Flash?
No MP tecnici (non rispondo nemmeno!), usa il forum.