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

206
Views
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 answers
Answer question

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 Report

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 Report

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 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!