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è:
codice:
for i=estratto i<N-1 i++
array[i]=array[i+1]
n=N-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 */
 }

}