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

205
Vistas
Cómo generar X números aleatorios, donde cada número está entre un rango de A y B y la suma total de todos los números tiene que ser Y

Estoy tratando de codificar (JavaScript o VB.NET) un algoritmo para generar x números aleatorios. Cada número aleatorio debe estar dentro de un cierto rango y la suma total de todos los números debe ser igual a una constante. Particularmente, no necesito el código exacto (si lo necesito, siempre puedo preguntar cuándo empiezo a depurar), sino solo la lógica detrás de todo.

En mi caso particular: necesito generar 4 números aleatorios, cada uno entre 0 y 10, y la suma total de los números generados aleatoriamente debe ser 24.

Si necesita más información: por favor pregunte. Gracias de antemano por tratar de resolver esto conmigo 🙂.

EDITAR : Debería haber agregado lo que ya probé (el código está en VB.NET pero no es tan difícil, así que ...) Según esta respuesta de StackOverflow, esto es lo que ya probé (aunque no funciona):

 Dim intAverageNumberMark As Integer = 24 / 4 Dim intOverMark As Integer = 0 Dim intGeneratedRandomNumber As Integer = 0 Dim intCurrentSumOfRandomNumbers = 0 For intCounter = 0 To intNumberOfTowers - 1 intGeneratedRandomNumber = RandomNumber(0 + intGeneratedRandomNumber, 10) intOverMark = If(intGeneratedRandomNumber > intAverageNumberMark, intGeneratedRandomNumber - intAverageNumberMark, 0) If intCounter = intNumberOfTowers - 1 Then intNumbers(intCounter) = 24 - intCurrentSumOfRandomNumbers End If intNumbers(intCounter) = intGeneratedRandomNumber intCurrentSumOfRandomNumbers += intGeneratedRandomNumber Debug.Print(intGeneratedRandomNumber) Next

intNumbers() es una matriz declarada con Dim intNumbers(7) As Integer .

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

sum = 0; loop generate new number if sum + new number <= constant{ sum += new number break out of loop }
about 4 years ago · Juan Pablo Isaza Denunciar

0

El enfoque más fácil es tomar un método de fuerza brte y generar todas las combinaciones posibles y tomar una selección aleatoria de este conjunto de resultados.

 function generate(from, to, size, sum) { function iter(right, delta) { if (delta < 0) return; if (!delta && right.length === size) return result.push(right); if (!delta || right.length === size) return; for (let i = from; i <= Math.min(delta, to); i++) iter([...right, i], delta - i); } const result = []; iter([], sum); return result; } const result = generate(0, 10, 4, 24); console.log(result.length); document.getElementById('out').innerHTML += result.map(a => a.map(v => v.toString().padStart(2, ' ')).join(' ')).join('\n');
 <pre id="out"></pre>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Si todo lo que está buscando es el algoritmo, este es el enfoque que tomaría:

  1. comience con su objetivo total 'C'
  2. Genere un número aleatorio 'r' en su rango deseado.
  3. comprobar si r > C, en caso afirmativo, reducir r a C
  4. restar r de C (actualizando C fuera del bucle)
  5. repetir desde 1 si C != 0

Una cosa que creo que debo señalar es que los números se volverán cada vez más no aleatorios a medida que C se acerca a 0; la velocidad con la que esto ocurre depende de los límites superior e inferior de su número aleatorio en comparación con C.

También puede averiguar algunos puntos de datos adicionales sobre este algoritmo, como cuántas veces se ejecuta el ciclo (cuántos números generó).

about 4 years ago · Juan Pablo Isaza 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