遇到笔试题如下:
M个鱼丸,N个肉丸,K个碗,所有丸子都分到碗中,不能混装,可以有空碗。
数据:1≤M≤50,1≤N≤50,1≤K≤50,一个碗可以放任意多的丸子
比如 鱼丸1,肉丸1,碗3,分法(1,0,1)(1,1,0)(0,1,1)算一种分法。
print("输入鱼丸数量M,1≤M≤50")
M = int(input())
print("输入鱼丸数量N,1≤N≤50")
N = int(input())
print("输入碗数量K,1≤K≤50")
K = int(input())
# m个丸子放入n个碗的分法,允许有空
def fun1(m,n):
if m == 0 or n == 1:
return 1
if n > m:
return fun1(m, m)
else:
return fun1(m, n-1) +fun1(m-n, n)
# m个丸子放入n个碗的分法,不允许有空
def fun2(m,n):
if m == n:
return 1
if m > n:
return fun1(m-n,n)
if m < n:
return 0
def fun3(M,N,K):
num = 0
if K <= 1:
return 0
else:
for i in range(1, K): # 给1~k+1个碗分丸子,i个碗分M鱼丸,K+1-i个碗分N肉丸
num1 = fun2(M,i)
num2 = fun1(N, K-i)
num += num1*num2
return num
if __name__ == "__main__":
num =fun3(M,N,K)
print("分法有 %d 种" % num)
想了一天,感觉这下应该是没有错的了。