PDA

Visualizza la versione completa : Numeri da 1 a 9: tutte le possibili combinazioni senza ripetizioni


 
mircov
02-10-2004, 13:17
Salve. Vorrei creare uno script che mi permetta di generare tutte le possibili combinazioni dei numeri da 1 a 9 (compresi) senza ripetere i numeri stessi (in partica numeri come 158519895 non devono comparire ma solo numeri nei quali ogni numero compaia una volta come 123456789 o 593468721). Qualcuno ha un'idea di come si possa fare?

piero.mac
02-10-2004, 13:26
Ho una routine gia' fatta... vedi se ti va bene.


<?php
mt_srand((double)microtime()*1000000);
for ($i=1; $i<=9; $i++) $cnt[$i]=0;
for($i=1; $i<=9; $i++)
{
do
{
$z=mt_rand()%9+1;
}
while ($cnt[$z]>0);
$cnt[$z]=$cnt[$z]+1;
$num[$i]=$z;
}
for ($i=1;$i<=9; $i++){
echo $num[$i] . " ";
}
?>


:ciauz:

mircov
02-10-2004, 13:31
Si, va bene. Ora però dovrei fare in modo che mi trovi tutte le possibili combinazioni. Hai qualche idea di come possa modificare lo script?

mircov
02-10-2004, 13:40
Allora. Io ho pensato di fare così:

calcolo quante possibili combinazioni ci sono (e questo non lo so fare. Dovrebbe essere qualcosa tipo 9^9 ??? :confused: )

A questo punto faccio un ciclo for che continua fino a quando il contatore è inferiore al numero totale delle combinazioni possibili.

Ad ogni generazione di numero Controllo se è già presente nel DB. Se non è presente lo memorizzo, se invece è presente lascio il contatore al numero attuale (praticamente non lo faccio avanzare) e ricomincio il ciclo.

Allora? Che ne dici?

piero.mac
02-10-2004, 13:57
Dico niente.... Lo script ti genera 9 numeri in ordine casuale, tutti i numeri da uno a nove. Cos'altro dovresti fare? verificare l'univocita'. Se cerchi una chiave usa una funzione apposita.

gm ne ha una disponibile (se ancora c'e') nel suo sito. genera una chiave random.

:ciauz:

mircov
02-10-2004, 14:03
No, io devo memorizzare tutte le possibili cominazioni in un DB. Quindi alla fine i record presenti saranno tanti quante sono le possibili combinazioni.

piero.mac
02-10-2004, 14:15
Originariamente inviato da mircov
No, io devo memorizzare tutte le possibili cominazioni in un DB. Quindi alla fine i record presenti saranno tanti quante sono le possibili combinazioni.
:oVVoVe:

387.420.489

TRECENTOOTTANTASETTEMILIONI
QUATTROCENTOVENTIMILA
QUATTROCENTOOTTANTANOVE RECORD????

mi sa che hai mangiato pesante stamane. Fai un ciclo for partendo da 111111111 fino a 999999999 incrementando di 1 ... a che ti serve una funzione ??!!??

manco fossero vecchie lire.... auguri.

:ciauz:

mircov
02-10-2004, 14:19
Veramente non ho mangiato perchè ho una colica! :D Cmq grazie per l'aiuto! Ciao!

mircov
02-10-2004, 14:26
E comunque mica sono 387.420.489?
Nel frattempo ho chiesto anche in programmazione e mi hanno detto che il calcolo da fare è questo:

9*8*7*6*5*4*3*2*1 = 362880

Loading