Python多重循环取球问题
从r个红球,w个白球,b个黑球中任意取出8个作为一组,在一组中可以没有黑球但一定有红球和白球。
补充函数fun,统计取球的方案个数
例如输入666,返回26
思路:
1. 对于第一个循环,取8个球,需要先将红球和白球分别从它们的数量中取出。
2. 对于第二个循环,取剩下的球,如果黑球的数量大于0,则黑球可以随便取,否则不能取。
3. 统计方案数,可以用组合数学中的组合公式计算。
代码如下:
def fun(r, w, b):
cnt = 0 # 记录方案数
for i in range(1, min(r, w)+1): # 第一层循环,取8个球
if r >= i and w >= i: # 第二层循环,取剩下的球
for j in range(1, min(b, (r-i)*(w-i))+1): # 第三层循环,取剩下的球
if j <= i*w+i*r-j: # 判断是否能取到黑球
cnt += comb(i+j-1, j-1) # 计算组合数并累加到方案数中
return cnt
# 测试代码
r = 6; w = 4; b = 2
print(fun(r, w, b)) # 输出结果为26