赞
踩
本文介绍了排列组合经典问题——n个人平均分成m组的解法(公式),并给出其Python程序,详情如下。
求n个人平均分成m组的分配法。设分配方法共
N
N
N种,每组
k
=
n
m
k=\frac{n}{m}
k=mn人,则:
N
=
{
0
,
n
<
m
or
n
%
m
≠
0
1
,
n
=
m
C
n
k
C
n
−
k
k
C
n
−
2
k
k
⋯
C
2
k
k
C
k
k
A
m
m
,
n
>
m
and
n
%
m
=
0
N =
Python程序如下:
''' Author: xyyang date: 2022-11-11 qq: 1391650991 ''' from scipy.special import comb,perm#组合、排列 def PC_n2m(n,m): if n<0 or m<0 or (not isinstance(n,int)) or (not isinstance(m,int)): print("人数或分组数据有误!") return if n<m or n%m!=0: return 0 if n==m: #n%m=0 return 1 if n>m and n%m==0: k=n//m N=1 for i in range(m): N*=comb(n-i*k,k) N=N/perm(m,m) #去重 return N if __name__=='__main__': n=6;m=3 print("{0}人平均分成{1}组,共{2}种方法".format(n,m,PC_n2m(n,m))) #15 #print(f"{n}人平均分成{m}组,共{PC_n2m(n,m)}种方法")
或者
''' Author: xyyang date: 2022-11-11 qq: 1391650991 ''' from scipy.special import comb,perm#组合、排列 def PC_n2m(n,m): if n<0 or m<0 or (not isinstance(n,int)) or (not isinstance(m,int)): print("人数或分组数据有误!") return if n%m!=0: return 0 else: if n==m: return 1 else: k=n//m N=1 for i in range(m): N*=comb(n-i*k,k) N=N/perm(m,m) #去重 return N if __name__=='__main__': n=6;m=3 print("{0}人平均分成{1}组,共{2}种方法".format(n,m,PC_n2m(n,m))) #15 #print(f"{n}人平均分成{m}组,共{PC_n2m(n,m)}种方法")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。