PDA

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


mircov
02-10-2004, 12: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, 12: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, 12: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, 12: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, 12: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, 13: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, 13: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, 13:19
Veramente non ho mangiato perch ho una colica! :D Cmq grazie per l'aiuto! Ciao!

mircov
02-10-2004, 13: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