Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

266
Views
¿Cómo puedo encontrar un conjunto de números aleatorios que sumen un número específico?

Este es mi código a continuación. El código en sí hace eco si la suma de tres números aleatorios es igual a 100. Por ahora, para obtener un resultado de 100 como $valuestotal , tengo que recargar mucho la página. Pero quiero obtener el resultado de 100 como $valuestotal cada vez que recargo la página. ¿Cómo puedo hacer esto?

Pensé que sería posible con un bucle en bucle. Pero da el mismo resultado x veces. Quiero que PHP siga probando diferentes valores aleatorios, y cuando alcance el valor de 100 como $valuestotal , debería hacer eco de $valuestotal ...

Lo que realmente quiero es, por ejemplo, quiero que tres números aleatorios obtengan un total de 100, por ejemplo, 35, 25 y 50. O 25, 15 y 60... y la lista continúa...

¿Cómo es esto posible?

 $values = rand(1, 100); $values2 = rand(1, 100); $values3 = rand(1, 100); $valuestotal = $values + $values2 + $values3; // while ($valuestotal === 100) { echo $values; echo '<br>'; echo $values2; echo '<br>'; echo $values3; echo "<br>"; echo $valuestotal; }
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Otro posible enfoque. El código es un poco más complejo que algunas de las otras respuestas, pero quería agregar una forma que solo necesitaría repetir una vez.

 $target = 100; $n = 3; while ($n) { if (1 < $n--) { $addend = rand(0, $target - ($n - 1)); $target -= $addend; $addends[] = $addend; } else { $addends[] = $target; } } var_dump($addends);

Básicamente, resta un número aleatorio entre 0 y el resto de la resta anterior n veces hasta que solo queda una repetición, y el resto es la última pieza. $n - 1 está ahí para que no reste demasiado al azar para que quede suficiente para el resto de las repeticiones.

over 4 years ago · Santiago Trujillo Report

0

No necesitará hacer un bucle dentro de un bucle. Por ejemplo, podrías hacer esto:

 <?php $keepChecking = true; $values = 0; $values2 = 0; $values3 = 0; $valuestotal = 0; while($keepChecking){ $values = rand(1, 100); $values2 = rand(1, 100); $values3 = rand(1, 100); $valuestotal = $values + $values2 + $values3; if ($valuestotal === 100){ $keepChecking = false; } } echo $values; echo '<br>'; echo $values2; echo '<br>'; echo $values3; echo "<br>"; echo $valuestotal; ?>

Los resultados pueden ser:

 2 37 61 100

Puede probar aquí: http://phpfiddle.org/lite

over 4 years ago · Santiago Trujillo Report

0

En un bucle while , el bloque se ejecutará siempre que la condición sea verdadera. Entonces puede pensar, ¿qué tiene que ejecutar varias veces y cuándo debe detenerse?

Lo que necesita ejecutar varias veces es la recopilación de números aleatorios:

 while ( ... ) { # roll dice, save numbers }

Ahora, esto debería detenerse cuando la suma sea 100. La condición establecida en el bucle debe ser verdadera para que se ejecute varias veces, por lo que, en este sentido, tiene que ejecutarse mientras la suma no sea 100. Aquí hay un punto clave que se invirtió. . Si su condición es falsa (por casualidad probablemente será después de la primera ejecución), entonces el ciclo ya se detuvo. Tienes que correr mientras la suma no es 100 para que cuando lo sea, ya no acumule números aleatorios. Luego procedes a repetirlos.

 $valuestotal = 0; while ($valuestotal != 100) { $value1 = rand(1, 100); $value2 = rand(1, 100); $value3 = rand(1, 100); $valuestotal = $value1 + $value2 + $value3; } echo "$value1<br>$value2<br>$value3<br>$valuestotal";

Como una sintaxis alternativa, puede almacenar los valores en una matriz y usar la función array_sum() :

 $numbers = []; while (array_sum($numbers) != 100) $numbers = [ rand(1, 100), rand(1, 100), rand(1, 100), ]; echo join(' + ', $numbers), ' = ', array_sum($numbers);
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!