Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

154
Visualizações
¿Matriz de números aleatorios con suma en un rango dado?

En C, ¿cómo obtengo una matriz de n números (cada uno 0x00-0xFF en mi caso), de los cuales la suma está dentro de un rango dado 0..k ?

Los números aleatorios múltiples de C ++ casi duplicados que se suman para igualar un cierto número apuntan a una suma específica, pero en mi caso, la suma puede ser cualquier cosa entre 0..k .

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Debe especificar cuál es la distribución deseada de los números aleatorios.

Si no hay más requisitos, sugeriría uno de los siguientes:


(1)

  • elige un número aleatorio a[1] en el intervalo 0 .. k
  • elija un número aleatorio a[2] en el intervalo 0 .. ka[1]
  • elija un número aleatorio a[3] en el intervalo 0 .. ka[1]-a[2]
  • ...
  • elija un número aleatorio a[n] en el intervalo 0 .. ka[1]-a[2]-...-a[n-1]

Si tiene un límite superior m en el rango del número aleatorio, use min(ka[1]-... m) como límite superior del intervalo.

Desventajas: obtendrá muchos números pequeños y solo unos pocos grandes.


(2)

  • elige n números aleatorios a[1], .., a[n] en el intervalo 0 .. m , siendo m el límite superior
  • s = a[1]+a[2]+...+a[n]
  • multiplique cada a[i] por k/s (si se requieren números enteros, redondee hacia abajo)

Desventajas: Es poco probable obtener grandes números de esta manera. Si se requieren números enteros, es probable que haya una brecha entre la suma de los números yk debido a un error de redondeo.


Creo que obtienes números "mejores" con la opción (2), pero como se indicó anteriormente, depende de los requisitos.

over 4 years ago · Santiago Trujillo Relatório

0

Suponiendo que k es menor que 255 * n , una solución es asignar k / n a cada elemento de la matriz y luego restar aleatoriamente un valor a los elementos de la matriz.

 // for (int i = 0; i < n; i++) array[i] = k / n; // for (int i = 0; i < n; i++) array[i] -= randbetween(0, array[i]); for (int i = 0; i < n; i++) array[i] = randbetween(0, k / n);

Esto tiene una suma esperada de k / 2 . Al modificar la función randbetween() puede cambiar la probabilidad de la suma de la matriz resultante.

over 4 years ago · Santiago Trujillo Relatório

0

Es fácil crear un número dentro del rango [0, 255] .

Es fácil identificar si k > 255*n o k < 0 no hay solución.

Si 0 <= k <= 255*n , la solución existe. Aquí solo hablamos de n > 1 condición.

Ha creado n-1 números aleatorios y la suma de los n-1 números es s1 , suponga que el n-ésimo número es x . Entonces s1 + x = k , y x debería ser [0, 255] . Si los n-1 números están todos dentro del rango [0, a] , entonces (n-1)*a + 255 >= k , obtenemos a >= (k-255)/(n-1) .

Si k > 255 , simplemente sea a = (k-255)/(n-1) . Significa que s1 es [0, k-255] . Entonces el enésimo número x puede ser cualquier número aleatorio dentro de [0, 255] . Entonces, la solución es arbitraria, seleccione n-1 números, cada uno dentro de [0, (k-255)/(n-1)] (usted sabe (k-255)/(n-1) <= 255 , por lo que cumplió su condición ), y seleccione un número aleatorio dentro de [0, 255] .

Si k <= 255 , seleccione arbitrariamente n números, cada uno dentro de [0, k/n] (usted sabe que k/n está dentro de [0, 255]).

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda