def combination(m, n): if n > m: return [] if n == 0: return [[]] if n == 1: return [[i] for i in range(1, m+1)] if n == m: return [[i for i in range(1, m+1)]] res = [] for i in range(m, n-1, -1): combs = combination(i-1, n-1) for comb in combs: res.append(comb+[i]) return resm = 5n = 3print("一共有", combination(m, n), "种可能的组合。")
时间: 2024-04-27 14:23:58 浏览: 17
这个代码实现了一个求组合数的函数,其中m表示总共有多少个数,n表示要从中选出多少个数来组合。函数返回一个列表,列表中每个元素都是一个列表,表示一种组合。
例如,当m=5,n=3时,函数返回的列表就表示从1到5这5个数中选出3个数来组合的所有可能性。
这个函数的实现方式是通过递归来求解。对于每一个i,先求出从1到i-1中选出n-1个数来组合的所有可能性,然后将i加入到每一种可能性中。最终将所有可能性都加入到结果列表中并返回。
在本例中,调用combination(5, 3)即可求得5个数中选3个数来组合的所有可能性。
相关问题
编写计算组合数的程序。要求输入数据要有容错功能。 **输入格式要求:"%d,%d" 提示信息:"Input m,k (m>=k>0):" **输出格式要求:"p = %.0f\n" 程序运行示例1如下: Input m,k (m>=k>0):3,2 p = 3 程序运行示例2如下: Input m,k (m>=k>0):2,3 Input m,k (m>=k>0):3,3 p = 1 Input m,k (m>=k>0):-2,-4 Input m,k (m>=k>0):4,2 p = 6
以下是一个实现了输入容错功能的计算组合数的程序:
```python
import math
def combination(m, k):
if m < k or m < 0 or k < 0:
return None
else:
return math.factorial(m) / (math.factorial(k) * math.factorial(m - k))
while True:
try:
m, k = map(int, input("Input m,k (m>=k>0):").split(","))
p = combination(m, k)
if p is None:
raise ValueError
else:
print("p = %.0f" % p)
break
except:
print("Invalid input, please try again.")
```
程序运行示例如下:
```
Input m,k (m>=k>0):3,2
p = 3
```
```
Input m,k (m>=k>0):2,3
Invalid input, please try again.
Input m,k (m>=k>0):3,3
p = 1
```
```
Input m,k (m>=k>0):-2,-4
Invalid input, please try again.
Input m,k (m>=k>0):4,2
p = 6
```
编写函数,输入n和m的值,计算Cmn
可以使用以下公式计算组合数 Cmn:
Cmn = m! / (n! * (m-n)!)
其中,! 表示阶乘运算,即一个正整数的阶乘是指从1到这个数所有正整数的乘积。
下面是使用 Python 代码实现该函数:
```python
def combination(n, m):
"""
计算组合数 Cmn。
"""
if n < 0 or m < 0 or n > m:
return None
# 计算阶乘
def factorial(num):
if num == 0:
return 1
else:
return num * factorial(num - 1)
return factorial(m) / (factorial(n) * factorial(m - n))
```
对于输入 n=3, m=7,调用该函数可以得到:
```python
>>> combination(3, 7)
35.0
```
因此,C37 = 35。