定义
排列:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个不同的元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列,A(n,m)表示排列的个数;
组合:从n个不同元素中,任取m个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合,C(n,m)表示组合的个数。
其中n是下标,m是上标。
计算公式
排列:A(n,m) = n(n-1)(n-2)…(n-m+1) = n!/(n-m)!
组合:C(n,m) = A(n,m)/m! = n!/m!(n-m)!
代码
//排列
int A(int n,int m) { //n下标 m上标
int a=n; //复制n
if(n<m) return -1; //判断是否满足要求(m<=n)
for(int i=n-m+1; i<n; i++) {
a*=i; //计算n的阶乘除以n-m的阶乘
}
return a; //返回排列个数
}
//组合
int C(int n,int m) { //n下标 m上标
if(n<m) return -1; //判断是否满足要求(m<=n)
return A(n,m)/A(m,m); //返回组合个数
}