- Home
- Categorie
- Coding e Sistemistica
- PHP
- Ottenere numeri Random fino al raggiungimento di una somma.
-
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 whilewhile ($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 20somma = 50
invece quello che vedo è:peso 1
peso 21
peso 21
peso 13la 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
-
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
-
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
-
doohooo!!! ahahahhah