Ciao, a mio avviso il codice è un po' bruttino...
Partiamo dall'inizio:
Codice:
int numeri[max_numeri];
Non è utilizzata e crea solo confusione dato che poi dichiari la funzione giocoEstrazioni con all'interno la variabile
Altra cosa:
Codice:
int giocoEstrazioni(int numero)
Viene chiamata dal main con
Codice:
int numero;
giocoEstrazioni(numero);
Tuttavia la variabile "numero" non è inizializzata, fortunatamente non viene usata all'interno della funzione giocoEstrazioni, tuttavia potrebbe portare a problemi.
Quindi il mio consiglio è quello di utilizzare l'opzione -Wall quando compili.
Passiamo ora al problema da te esposto ovvero i numeri doppi sulla stessa ruota.
Riprendendo la tua funzione io farei una cosa così:
Codice:
....
map<int,int> numeri;
map<int,int>::iterator it;
....
int giocoEstrazioni(int numero)
{
int estratto;
srand (time(NULL));
for(int j=0; j<max_citta; j++){
numeri.clear();
cout<<endl<<citta[j]<<" \t";
for(int i=0; i<max_numeri; i++){
estratto=rand()%90+1;
it=numeri.find(estratto);
if (it==numeri.end())
cout<<" \t"<<estratto;
else
i--;
}
}
cout<<endl;
}
Ovviamente avendo prima "ripulito" il codice come ti ho esposto prima.
E' abbastanza semplice concettualmente, sicuramente non è il massimo dell'efficienza
Ciao