2024-09-30 16:34:21 发布
网友
使用python 我们可以用多少种方式组成一个至少有一个男人和一个女人的三人小组。我们需要找到不同的方法来选择一组3人
def diverseDeputation(m, w):
例如: m=1 w=3 有m=1名男性可用,w=3名女性可用。例如,给它们贴上m1、w1、w2、w3的标签。有三种可能的方式形成一个多样化的群体:(m1,w1,w2),(m1,w1,w3)和(m1,w2,w3)。唯一其他可能的排列是(w1,w2,w3),它不包括人,所以它是无效的
如果你只需要得到数字(而不是组本身),那更像是一个数学问题而不是编程问题。你提到的是排列,但你的例子说明了组合。在置换中(m1,w1,w2)计数不同于(m1,w2,w1)
对于组合:
def diverseDeputation(m, w): return m*w*(m+w-2)//2
对于排列:
def diverseDeputation(m, w): return m*w*(m+w-2)*3
对于实际组合:
def diverseDeputation(m,w): for im in range(m): for iw in range(w): for iw3 in range(iw+1,w): yield (f"m{im+1}",f"w{iw+1}",f"w{iw3+1}") for im3 in range(im+1,m): yield (f"m{im+1}",f"w{iw+1}",f"m{im3+1}") for c in diverseDeputation(1,3): print(c) ('m1', 'w1', 'w2') ('m1', 'w1', 'w3') ('m1', 'w2', 'w3') for i,c in enumerate(diverseDeputation(4,2),1): print(i,c) 1 ('m1', 'w1', 'w2') 2 ('m1', 'w1', 'm2') 3 ('m1', 'w1', 'm3') 4 ('m1', 'w1', 'm4') 5 ('m1', 'w2', 'm2') 6 ('m1', 'w2', 'm3') 7 ('m1', 'w2', 'm4') 8 ('m2', 'w1', 'w2') 9 ('m2', 'w1', 'm3') 10 ('m2', 'w1', 'm4') 11 ('m2', 'w2', 'm3') 12 ('m2', 'w2', 'm4') 13 ('m3', 'w1', 'w2') 14 ('m3', 'w1', 'm4') 15 ('m3', 'w2', 'm4') 16 ('m4', 'w1', 'w2')
我相信阿兰的回答是OP要求的。但这是打印所有组合解的代码
from itertools import product, combinations def diverseDeputation(m, w): for n in range(max(3-w,1), min(3,m)): for x in product(combinations(range(1,m+1),n), combinations(range(1,w+1),3-n)): print(x) #print IDs of men and women
如果你只需要得到数字(而不是组本身),那更像是一个数学问题而不是编程问题。你提到的是排列,但你的例子说明了组合。在置换中(m1,w1,w2)计数不同于(m1,w2,w1)
对于组合:
对于排列:
对于实际组合:
我相信阿兰的回答是OP要求的。但这是打印所有组合解的代码
相关问题 更多 >
编程相关推荐