Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

264
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda