C/C++学习笔记

C++ 计算排列数和组合数

2020-04-27  本文已影响0人  零岁的我

#include<iostream>
using namespace std;

//计算阶乘
/*
注意:0!= 1
*/
int factorial(int n)
{
    int fc=1;
    for(int i=1;i<=n;++i) fc *= i;
    return fc;
}

//计算组合数
/*从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做n个不同元素中取出m个元素的组合数。用符号c(n,m) 表示。
组合数公式:c(n,m)=n!/(m! * (n-m)!)
性质:c(n,m) = c(n,m-n)
递推公式:c(n,m) = c(n-1,m-1) + c(n-1,m)
*/
int combo(int n,int m)
{
    int com=factorial(n)/(factorial(m)*factorial(n-m));
    return com;
}

//计算排列数
/*从n个不同的元素中任取m(m≤n)个元素的所有排列的个数,叫做从n个不同的元素中取出m(m≤n)个元素的排列数。
排列与元素的顺序有关,组合与顺序无关。
排列数公式:A(n,m) = n*(n-1)*...*(n-m+1)=n!/(n-m)!
排列数公式中总共有m项乘积。
*/
int permutation(int n,int m)
{
    int perm=factorial(n)/factorial(n-m);
    return perm;
}

int main(int argc,char **argv)
{
    int m,n;
    while(cin>>n>>m){
        cout<<"c(n,m)= "<<combo(n,m)<<endl;
        cout<<"A(n,m)= "<<permutation(n,m)<<endl;
    }
    return 0;
}
结果截图
上一篇下一篇

猜你喜欢

热点阅读