PDA

Visualizza la versione completa : [C] come eliminare i doppioni da un array


stejano
17-11-2008, 12:25
Sono un po' nuovo del C e non riesco a risolvere il mio problema.
Ho cercato in rete e qualcosa ho trovato, ma non proprio specifico a quello che voglio fare io.

Ho creato un array numerico in c classico:


{
x=4;
for (i=0;i<=3;i++)
{
ciccio = (arc4random() % x)+1;

carta[i]=ciccio;



}
}


Ora però NON riducendo le posizioni del mio array, vorrei eliminare i valori doppi, ottenendo solo valori unici e di conseguenza :un array con valori casuali nelle posizioni, ma MAI ripetuti.
Come posso fare?
grazie.

oregon
17-11-2008, 12:31
Quando generi il prossimo numero random, fai un ciclo per confrontarlo con tutti gli elementi dell'array gia' assegnati ... se non lo trovi, lo assegni al prossimo e continui, altrimenti lo generi nuovamente e ripeti il controllo.

stejano
17-11-2008, 14:56
mmm...
Ho provato così, ma ugualmente dei valori mi si ripetono


{
int b;
int a;
int c;
x=4;
for (i=0;i<=3;i++)
{
ciccio = (arc4random() % x)+1;

carta[i]=ciccio;

}

for (a=0;a<=3;a++)
{
for (c=0;c<=3;c++)
{
if(a != c)
{
while(carta[a]==carta[c])
{
ciccio=(arc4random() % x)+1;
carta[c]=ciccio;
}
}
}

}
}


Non capisco come mai.

dymam
18-11-2008, 11:16
perchè non ricontrolli tutti i valori dopo averli riassegnati

prova con questo (non l'ho provato ma dovrebbe andare)


:
:
:
ciccio = (arc4random() % x)+1;
carta[0]=ciccio;
control=1;

for (i=1;i<=3;i++)
{
while control=1
{
control=0;
ciccio = (arc4random() % x)+1;

for(a=i-1;a=0;a--)
{
if (carta[a]== ciccio)
{
control=1;
continue;
}
}
}
carta[i]=ciccio;
}
:
:
:

Loading