Combinaciones posibles de 5 números del 1 al 50

Resuelto
PrivatD -  
 PrivatD -

Hola,

Me gustaría probar una idea que me ha estado inquietando desde hace un tiempo.

Se trata de la Euromillones, lo habrán adivinado.

Me gustaría recibir ayuda para listar en Excel todas las combinaciones posibles de 5 números del 1 al 50.

Cualquier ayuda será apreciada

5 respuestas

  1. Pierr10 Mensajes publicados 13863 Fecha de registro   Estado Moderador Última intervención   5 861
     

    Hola,

    Efectivamente, es una combinación en el sentido matemático del término.
    La cantidad de estas combinaciones es (50*49*48*47*46)/(5*4*3*2), lo que hace:
    2 118 760 combinaciones posibles.

    ¡Va a hacer falta muchas líneas en su tabla de Excel!


    Lo que se concibe bien se enuncia claramente,
    Y las palabras para decirlo llegan fácilmente.
    (Boileau)
    1
  2. mamiemando Mensajes publicados 33174 Fecha de registro   Estado Moderador Última intervención   7 944
     

    Hola,

    La pregunta que todo el mundo puede preguntarse naturalmente es cuál es el interés de listar todas las combinaciones. Por ejemplo, si el objetivo es almacenar todas las combinaciones que ya han tenido lugar, no es necesario enumerarlas todas, solo las que han sucedido son relevantes.

    De hecho, desde el punto de vista de las matemáticas, no porque una combinación ya se haya realizado significa que tenga más o menos probabilidades de realizarse en el futuro. Hablamos de sorteos independientes. En otras palabras, mantener tales estadísticas no tiene un interés práctico real.

    Enumeración

    Si a pesar de todo quieres enumerar todas estas combinaciones, como han subrayado las numerosas personas que ya han intervenido, Excel es bastante inadecuado para manejar tales volúmenes de datos. Un lenguaje como Python sería mucho más práctico, como muestra el siguiente ejemplo.

    from itertools import combinations from pprint import pprint k = 5 # Longitud de las combinaciones n = 50 # Valor máximo de los números involucrados en las combinaciones c = list(combinations(list(range(1, n + 1)), k)) print(len(c)) # Muestra el número de combinaciones pprint(c[:10]) # Muestra las 10 primeras combinaciones

    Resultado :

     2118760 [(1, 2, 3, 4, 5), (1, 2, 3, 4, 6), (1, 2, 3, 4, 7), (1, 2, 3, 4, 8), (1, 2, 3, 4, 9), (1, 2, 3, 4, 10), (1, 2, 3, 4, 11), (1, 2, 3, 4, 12), (1, 2, 3, 4, 13), (1, 2, 3, 4, 14)]

    Conteo

    En el caso de EuroMillions, el sorteo se hace sin reemplazo y, por lo tanto, solo nos interesan las combinaciones sin repeticiones, cuyo número se obtiene mediante esta fórmula (ver aquí) :

     K(n, k) = n! / (k! * (n - k)!)

    con :

    • ! es el operador factorial;
    • n = 50 (ya que se elige entre 50 números distintos);
    • k = 5 (ya que cada combinación está compuesta por 5 números)

    ... lo que da el mismo resultado que el que Pierr10 calculó en el mensaje #1.

    En Python :

    from math import factorial def nc(n, k): return factorial(n) // (factorial(k) * factorial(n - k)) print(nc(50, 5)) # Muestra 2118760

    ... o más simplemente :

    from math import comb print(comb(50, 5))

    Buena suerte

    1
    1. PrivatD
       

      Les agradezco

      0
  3. PrivatD
     

    ¡En efecto sí! Pero ahora, ¿cómo listar eso? ¡Esa es la cuestión!

    0
  4. brucine Mensajes publicados 25320 Fecha de registro   Estado Miembro Última intervención   4 193
     

    Hola,

    La pregunta no tiene absolutamente ningún interés, como señala Pierr10, vamos a colapsar Excel y nuestro PC al querer generar y mostrar esta lista que de todas formas no podrá ser consultada fácilmente ni servir como base de datos fácilmente explotable para un tratamiento numérico debido a su tamaño.

    Sería tratada más "naturalmente" por un lenguaje de programación, pero siempre que el resultado esperado sea bajo (lo que, en materia de factoriales, sigue siendo bastante teórico), se encuentra, por ejemplo, tratada aquí en Python o aquí en otros lenguajes.

    Si realmente se quiere en Excel, nada es más indispensable que lo que es innecesario, existen diferentes enfoques en VBA como aquí o sin él como allí.

    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      Hola, dado que hay que encontrar 5 números, me parece mucho más simple y rápido trabajar con 5 bucles anidados.

       Option Explicit Private Sub cc() Dim i1 As Integer, i2 As Integer, i3 As Integer, i4 As Integer, i5 As Integer Dim c As Long, n As Integer Dim r As Long, col As Integer c = 0 n = 50 r = 2 col = 1 Debug.Print Now, n For i1 = 1 To n For i2 = i1 + 1 To n For i3 = i2 + 1 To n For i4 = i3 + 1 To n For i5 = i4 + 1 To n c = c + 1 Cells(r, col) = i1 Cells(r, col + 1) = i2 Cells(r, col + 2) = i3 Cells(r, col + 3) = i4 Cells(r, col + 4) = i5 col = col + 6 If col = 25 Then col = 1 r = r + 1 End If Next i5 Next i4 Next i3 Next i2 Next i1 Debug.Print Now, c End Sub 
      1
      1. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 833 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
         

        Hola Hay que pensar que se deben encontrar las combinaciones sin duplicados. Y sin reintegros. Por ejemplo: 1,2,3,4,5. Es lo mismo que 5,3,4,2,1

        2
      2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención  
         

        Sí, afortunadamente, no estamos obligados a usar constantes como límites del bucle.

        0
      3. PrivatD > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
         

        Gracias, tomo nota

        1