Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    ciclo for escudendo i ripetuti

    Salve,
    mi trovo ad affrontare un problema matematico
    in pratica ho un form con 5 gruppi di checkbox, ogni gruppo ha un name proprio e value diverso per ogni checkbox (sono numeri da 1 a 20 per ogni name).
    Io devo prendere i valori che mi vengono passati tramite l'array (primi[],secondi[], ecc) e calcolare il numero massimo di combinazioni che posso ottenere senza che nella stessa comnbinazione ci siano numeri ripetuti prendono un numero per ogni name
    mettiamo caso che mi vegano passati questi dati:
    primi[] = 1, 2
    secondi[] = 2, 3, 4
    terzi[] = 1, 4, 5
    quarti[] = 4, 5, 6, 7
    quinti[] = 6, 7, 8, 9, 10
    (sono valori ipotetici)
    devo ottenere il numero massimo di combinazioni che si possono ottenere prendondo un numero per ogni array senza che lo stesso numero venga ripetuto nella stessa combinazione (ad esempio 1,3,4,5,6 - 1,3,4,5,6 - ecc)
    è possibile in php? mi sapete dire come? grazie
    Manifesto Aggiornato
    Sono proprietà privata di Reika

  2. #2
    Io non ho capito una fava

    Prendendo come esempio i 5 array che hai dato prima tu come risultato vuoi una cosa del genere:

    1,2,4,5,6
    1,2,5,4,6
    1,2,5,6,7
    1,2,5,6,8

    etc...


    Sono tante le combinazioni eh

  3. #3
    Originariamente inviato da cubalibre810
    Io non ho capito una fava

    Prendendo come esempio i 5 array che hai dato prima tu come risultato vuoi una cosa del genere:

    1,2,4,5,6
    1,2,5,4,6
    1,2,5,6,7
    1,2,5,6,8

    etc...


    Sono tante le combinazioni eh
    esatto

    ma a me non interessa stampare le combinazioni, mi interessa sapere quante ne sono, se può essere utile ogni array puoi contenere massimo 20 numeri
    Manifesto Aggiornato
    Sono proprietà privata di Reika

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472
    Se sei un "giocatore" direi che devi calcolare le combinazione che sviluppa un quintè...
    E se è così credo tu voglia realizzare qualcosa di simile a questo ...

    Meglio sarebbe trovare la formula per calcolare le combinazione della quintè ma è molto complessa....pensa che quella della trio (t3) è questa:
    a b c - [cd + be + af + g (a+b+c-2)] dove:
    a è il numero dei cavalli presenti solo al 1° posto;
    b è il numero dei cavalli presenti solo al 2° posto;
    c è il numero dei cavalli presenti solo al 3° posto;
    d è il numero dei cavalli presenti sia al 1° che al 2° posto (ma non al 3°);
    e è il numero dei cavalli presenti sia al 1° che al 3° posto (ma non al 2°);
    f è il numero dei cavalli presenti sia al 2° che al 3° posto (ma non al 1°);
    g è il numero dei cavalli presenti contemporaneamente ai 3 posti.

    Se poi il tuo obiettivo non era quello...be'...vorrà dire che ho parlato fra me e me..

  5. #5
    non sono un giocatore ma devo fare quello , la formula della t4 è stata un rompicapo assurdo, poi ho pensato che facendo calcolare allo script le combinazioni si fa prima
    Manifesto Aggiornato
    Sono proprietà privata di Reika

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472
    Questo l'ho provato funziona!

    Uso 5 array p1, p2, p3, p4 e p5 dove
    p1[1]=1, p1[2]=2
    p2[1]=2, p2[2]=3, p2[3]=4 e così via...
    (ho riportato i valori che hai fatto tu nell'esempio giusto per indenderci...)
    <?php
    for ($a1=1; $a1<=count($p1); $a1++)
    {

    for ($a2=1; $a2<=count($p2); $a2++)
    {
    for ($a3=1; $a3<=count($p3); $a3++)
    {
    for ($a4=1; $a4<=count($p4); $a4++)
    {
    for ($a5=1; $a5<=count($p5); $a5++)
    { $pos=1;
    if (($p1[$a1]==$p2[$a2]) || ($p1[$a1]==$p3[$a3]) || ($p2[$a2]==$p3[$a3]) || ($p1[$a1]==$p4[$a4]) || ($p2[$a2]==$p4[$a4]) || ($p3[$a3]==$p4[$a4]) || ($p1[$a1]==$p5[$a5]) || ($p2[$a2]==$p5[$a5]) || ($p3[$a3]==$p5[$a5]) || ($p4[$a4]==$p5[$a5]))
    {
    // si tratta di un elemento ripetuto e quindi non vale per il conteggio
    }
    else $co=$co+1;


    }
    }
    }
    }
    }
    echo $co;
    ?>

    In $co hai il numero delle combinazione del quinté.

    Tengo a precisare che ho considerato il contenuto dei 5 array nelle celle da 1 a n e non sono partito canonicamente da 0.
    Se preferisci partire da 0 naturalmente devi inizializzare tutti e 5 i cicli for da $a1=0, $a2=0 e così via...

  7. #7
    Non funziona, riporta molte meno delle combinazioni possibili

    Es. con

    $p1 = array(1,2);
    $p2 = array(3,5);
    $p3 = array(4,10);
    $p4 = array(5,19);
    $p5 = array(6,20);

    Restituisce 6

    1 3 4 5 6
    1 3 4 5 20
    1 3 4 19 6
    1 3 4 19 20
    1 3 10 5 6
    1 3 10 19 6

    queste sono 6 ed ovvio che ce ne stanno diverse altre


  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472
    L'esempio che ho fatto io l'ho testato e funziona eccome!
    L'ho testato con il link che ho messo nel mio primo post di risposta che calcola il costo delle quintè!

    <?php
    $p1[1]=1;
    $p1[2]=2;
    $p2[1]=3;
    $p2[2]=5;

    $p3[1]=4;
    $p3[2]=10;

    $p4[1]=5;
    $p4[2]=19;


    $p5[1]=6;
    $p5[2]=20;

    $co=0;
    for ($a1=1; $a1<=count($p1); $a1++)
    {

    for ($a2=1; $a2<=count($p2); $a2++)
    {
    for ($a3=1; $a3<=count($p3); $a3++)
    {
    for ($a4=1; $a4<=count($p4); $a4++)
    {
    for ($a5=1; $a5<=count($p5); $a5++)
    { $pos=1;
    if (($p1[$a1]==$p2[$a2]) || ($p1[$a1]==$p3[$a3]) || ($p2[$a2]==$p3[$a3]) || ($p1[$a1]==$p4[$a4]) || ($p2[$a2]==$p4[$a4]) || ($p3[$a3]==$p4[$a4]) || ($p1[$a1]==$p5[$a5]) || ($p2[$a2]==$p5[$a5]) || ($p3[$a3]==$p5[$a5]) || ($p4[$a4]==$p5[$a5]))
    {
    // si tratta di un elemento ripetuto e quindi non vale per il conteggio
    }
    else $co=$co+1;


    }
    }
    }
    }
    }
    echo $co;
    ?>

    dà 24 che è il risultato corretto...io non lavoro mai con gli indici 0 perché non ci sono abituato...inizializzo sempre da 1...tu mettendoci l'inizializzazione così ti considera anche l'indice 0 mentre io nel programmino ho inizializzato dall'indice 0....puoi risolvere tutto mettendo, come ho detto prima (modificando il messaggio forse mentre tu stavi scrivendo la risposta) l'inizializzazione dei cicli for a 0 anziché a 1

  9. #9
    Ok non avevo notato l'indice, ora mi da 92 che è più plausibile

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    472
    Non sono 92 sono 24!
    C'era qualcosa che non mi tornava

    Cambiando l'indice non devi modificare solo il valore iniziale del for ma anche il valore finale

    ecco così funziona

    <?php
    $p1 = array(1,2);
    $p2 = array(3,5);
    $p3 = array(4,10);
    $p4 = array(5,19);
    $p5 = array(6,20);


    $co=0;
    for ($a1=0; $a1<=count($p1)-1; $a1++)
    {

    for ($a2=0; $a2<=count($p2)-1; $a2++)
    {
    for ($a3=0; $a3<=count($p3)-1; $a3++)
    {
    for ($a4=0; $a4<=count($p4)-1; $a4++)
    {
    for ($a5=0; $a5<=count($p5)-1; $a5++)
    { $pos=1;
    if (($p1[$a1]==$p2[$a2]) || ($p1[$a1]==$p3[$a3]) || ($p2[$a2]==$p3[$a3]) || ($p1[$a1]==$p4[$a4]) || ($p2[$a2]==$p4[$a4]) || ($p3[$a3]==$p4[$a4]) || ($p1[$a1]==$p5[$a5]) || ($p2[$a2]==$p5[$a5]) || ($p3[$a3]==$p5[$a5]) || ($p4[$a4]==$p5[$a5]))
    {
    // si tratta di un elemento ripetuto e quindi non vale per il conteggio
    }
    else $co=$co+1;


    }
    }
    }
    }
    }
    echo $co;
    ?>

    Se vuoi essere sicuro del risultato vai su http://trotto.wagoo3.com/t5.php, inserisci i dati e vedi il costo del quintè...naturalmente le combinazioni sono quel numero lì moltiplicato per 4 visto che ogni combinazione del quinté costa 25 centesimi...

    Ho anche provato con qualcosa di sostanzioso tipo....
    $p1 = array(5,6,9,15,18,20);
    $p2 = array(3,5,6,7,8,9,15);
    $p3 = array(4,5,6,7,8,9,10,11,12,13,14,15);
    $p4 = array(5,6,7,8,9,10,11,12,13,14,15,16,17,18,19);
    $p5 = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 ,19,20);
    e dà il risultato (79744) in 1 secondo poco più...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.