Io userei un array di strutture del tipo:Originariamente inviato da ggmac
Non riesco a capire come ripartizionare i premi per fascie quindi ogni tot premi di fascia bassa inserirne uno di fascia alta di premio ecc.. ed attribuirne uno ogni 20 che giocano.
, dove NumeroPremio all'inizio dell'estrazione viene inizializzato a zero.codice:struct Giocatore { /* ... vari dati personali ... */ int NumeroPremio; }
Quindi iteri su tutti i premi da assegnare, e per ciascuno estrai un numero compreso tra 0 e il numero degli elementi nell'array dei giocatori; se il giocatore corrispondente ha NumeroPremio impostato a zero (cioè non ha ancora vinto niente) gli assegni il premio (assegnando a NumeroPremio un qualche ID che caratterizzi il premio vinto), altrimenti ripeti l'estrazione per il premio in questione finché non trovi qualcuno che non ha ancora vinto niente; bisogna naturalmente anche controllare che ci siano ancora giocatori senza premio, altrimenti rischi un loop infinito (anche se è raro che ci siano più premi che giocatori).
In alternativa puoi usare un'altra struttura dati da cui ogni volta vai a rimuovere il giocatore che ha appena vinto; i numeri casuali in questo caso saranno nel range [0, numero di elementi ancora nella lista).