【基础入门题】2021.11.27
口袋中共有12个球,红白黑的个数分别3、3、6,
从中任取8个,问共有多少种可能的颜色搭配?
编程语言:包括但不限于Python
题目来源:派森特给站每日刷题频道
————————————————
方法一:三重循环
R, W, B = 3, 3, 6 pick, count = 8, 0 for r in range(R+1): for w in range(W+1): for b in range(B+1): if r + w + b == pick: count += 1 print(r, w, pick-r-w) print('共有可能的颜色搭配数:',count)
运行结果:
0 2 6
0 3 5
1 1 6
1 2 5
1 3 4
2 0 6
2 1 5
2 2 4
2 3 3
3 0 5
3 1 4
3 2 3
3 3 2
共有可能的颜色搭配数: 13
方法二:二重循环
R, W, B = 3, 3, 6 pick, count = 8, 0 for r in range(R+1): for w in range(W+1): if B + r + w >= pick: count += 1 print(r, w, pick-r-w) print('共有可能的颜色搭配数:',count)
运行结果:
0 2 6
0 3 5
1 1 6
1 2 5
1 3 4
2 0 6
2 1 5
2 2 4
2 3 3
3 0 5
3 1 4
3 2 3
3 3 2
共有可能的颜色搭配数: 13
方法三:二重循环,以黑优先
R, W, B = 3, 3, 6 pick, count = 8, 0 for b in range(B+1): for w in range(W+1): if 0<=8-b-w<=3: count += 1 print(8-b-w,w,b) print('共有可能的颜色搭配数:',count)
运行结果:
3 3 2
3 2 3
2 3 3
3 1 4
2 2 4
1 3 4
3 0 5
2 1 5
1 2 5
0 3 5
2 0 6
1 1 6
0 2 6
共有可能的颜色搭配数: 13
方法四:组合库函数
from itertools import combinations as comb balls = sorted(list(set(list(comb('r'*3+'w'*3+'b'*6, 8))))) for ball in balls: print(ball.count('r'),ball.count('w'),ball.count('b')) print('共有可能的颜色搭配数:',len(balls))
运行结果:
2 0 6
3 0 5
3 1 4
3 2 3
3 3 2
2 1 5
2 2 4
2 3 3
1 1 6
1 2 5
1 3 4
0 2 6
0 3 5
共有可能的颜色搭配数: 13