• User

    Ottenere numeri Random fino al raggiungimento di una somma.

    Buongiorno a tutti,
    sto sviluppando un'applicazione in php e praticamente sono arrivato a un punto in cui ho la necessità di generare dei numeri casuali e che la il valore della somma dei numeri stessi non superi il valore stabilito in una variabile.

    Ecco il codice:

    [PHP]

    $crediti = "50"; //Dichiaro una variabile e setto il valore massimo che non deve essere superato
    $Qta = "0"; // Dichiaro la variabile d'incremento per il ciclo while

    while ($Qta < $crediti){ //Dichiaro che il ciclo deve continuare fino a che il valore della somma dei numeri casuali è inferiore al valore massimo
    $peso_es = mt_rand(1, $crediti); // Genero il numero casuale, compreso fra 1 e il valore massimo
    $Qta+=$peso_es; // Incremento la variabile con il valore casualmente generato
    echo "Peso" . $peso_es . "<br>"; // stampo sul video
    }

    [/PHP]

    Quello che mi aspettavo di vedere sullo schermo era una cosa del genere:

    peso 28
    peso 2
    peso 20

    somma = 50
    invece quello che vedo è:

    peso 1
    peso 21
    peso 21
    peso 13

    la somma è 56... maggiore di 50... :bho:

    Come faccio a mantenere il valore della somma dei numeri generati casualmente più basso rispetto al valore massimo impostato?

    Grazie a tutti

    Buona serata :gthi:


  • User

    Quindi da premettere che sono stanco quindi il codice che ti do è sporco e forse non funziona al 100% ed è dettata da 8 ore di lavoro e 2 ore di rotture varie, pensiamo alla funzione while che fa un cilco fino a quando non soddisfa la condizione.

    "$Qta < $crediti" è naturale che non avrai molte volte la somma giusta perché può soddisfare la richiesta anche 55 basta che è maggiore di 50.
    Allora la mia follia è questa:

    [PHP]
    $somma = 0;

    while ($somma < 50)
    {
    $somma+=rand(1,50);
    $chiudi[]=$somma; //MA RACCHIUDIAMO TUTTO

    }
    //vediamo se la somma non va bene
    if(array_sum($chiudi)>50){

    for($i=0; $i<=count($chiudi); $i++){
    $somma_di_nuovo+=$chiudi*;
    if($somma_di_nuovo<50){
    // cerchiamo i numeri che sommati arrivano a meno di 50
    echo $chiudi* .'<br/>';
    // dettiamo ultimo numero
    $ultimo_numero = 50-$somma_di_nuovo;

        echo "ultimo numero".$ultimo_numero; 
    }
    

    }

    }elseif(array_sum($chiudi)==50){
    // ci siamo, metti tu il seguito
    echo "ci siamo";
    }

    [/PHP]

    spero che vada, scusa se è sporco ma a caval donato :bigsmile::bigsmile:


  • User

    Ciao, grazie per la risposta! Avevo già risolto cambiando approccio:

    [PHP]

    $crediti = "100"; // Imposto il numero massimo di crediti

    while ($crediti > 0){ // Cicla fino a quando i crediti sono maggiori di 0

    $peso_es = mt_rand(1, $crediti); // A ogni ciclo sottraggo i crediti con il numero casuale che viene generato
    $crediti-=$peso_es;

    echo "Ultima cifra" . $peso_es . "<br>";

    }

    [/PHP]

    La somma dei numeri generati risulta sempre 100

    Domani per curiosità voglio provare anche il tuo codice

    Buona serata :gthi:


  • User

    doohooo!!! ahahahhah