Python - Nivel 18 - Reto 6 - Calcular número de combinaciones

preview_player
Показать описание
La función factorial se usa mucho en combinatoria. En este reto utilizamos la función factorial que definimos en el reto anterior para definir una función que calcule el número de combinaciones sin repetición de m elementos tomados de n en n.

También optimizaremos esta función para que lleve a cabo menos cálculos y sin tener que llamar a una función factorial externa a ella misma.
Рекомендации по теме
Комментарии
Автор

Yo lo hice de esta manera. Es más rápida pero no sabría decir que tanto, porque usé factorial.
def numero_combinaciones_simplificada(m, n):
dif=m-n
if dif>n:
for i in range(n):
res=1
res*=(m-i)
return (res)/(mi_factorial(n))
else:
for i in range(m-n):
res=1
res*=m-i
return (res)/(mi_factorial(m-n))

hanspuente
Автор

Yo lo realice de esta manera usando la función factorial que creé para resolver el ejercicio y aquí se los comparto. (Importante leer sobre compresión de listas y sintaxis para entender el código).

import math
def fact(n: int) -> int: return math.prod([x for x in range(1, n+1)])
def num_combinaciones(m: int, n: int) -> float: return fact(m) / (fact(n)*fact(m-n))
el total de elemntos >>> ")), int(input("Ingrese los elementos seleccionados >>> "))))

andrescamilocaballeroayala
Автор

Lo hice de esta manera, es largo pero entendible (por lo menos eso espero)

from os import system

def factorial_propio(numero):
solucion = 1
for i in range(numero):
solucion *= (i+1)
return solucion

def ingreso_datos():
numero_elementos = int(input("Ingrese el número de elementos: "))
numero_del_grupo = int(input("Ingrese número del grupo: "))
return numero_elementos, numero_del_grupo

def combinaciones(*proceso):
elementos = factorial_propio(proceso[0])
n_grupo = factorial_propio(proceso[1])
resta_facto =
solucion = elementos / (n_grupo*(resta_facto))
return solucion

def main():
datos = ingreso_datos()
if(datos[0]>datos[1]>0):
resultado = combinaciones(*datos)
print(f"El total de combinaciones de {datos[0]} elementos y {datos[1]} grupos, son de {int(resultado)} grupos diferentes sin repetición")#quiten tanto texto si desean por solo el resultado
else:
print("Ingrese un grupo menor que el n° elementos y mayor a 0")
input("presione enter");system("cls"); main();

main()

josekachkaniraqmi
Автор

el = n - r
divs = factorial(n) / (factorial(el)* factorial(r))

return divs

carlosvalera