擅长:python、mysql、java
<p>如果你只需要得到数字(而不是组本身),那更像是一个数学问题而不是编程问题。你提到的是排列,但你的例子说明了组合。在置换中(m1,w1,w2)计数不同于(m1,w2,w1)</p>
<p>对于组合:</p>
<pre><code>def diverseDeputation(m, w):
return m*w*(m+w-2)//2
</code></pre>
<p>对于排列:</p>
<pre><code>def diverseDeputation(m, w):
return m*w*(m+w-2)*3
</code></pre>
<p>对于实际组合:</p>
<pre><code>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')
</code></pre>