组合数问题

组合数问题_第1张图片

#include

int main()
{
    int T;
    scanf("%d", &T);

    for (int t = 0; t < T; ++t)
    {
        int N,M;
        scanf("%d%d", &N, &M);
        long long c = 0;
        long long facN = 1;
        for (int i = 1;i <= N;i++)
        {
            facN *= i;
        }
        long long facM = 1;
        for (int i = 1;i <= M;i++)
        {
            facM *= i;
        }
        long long facA = 1;
        for (int i = 1;i <= (M-N);i++)
        {
            facA *= i;
        }
        c = facM / (facN * facA);
        printf("%lld\n", c);
    }

    return 0;
}
#include

 计算阶乘
long long factorial(int n)
{
    long long result = 1;
    for (int i = 1; i <= n; ++i) 
    {
        result *= i;
    }
    return result;
}

 计算组合数
long long calculateCombination(int N, int M)
{
     防止溢出,使用 long long 类型
    long long facN = factorial(N);
    long long facM = factorial(M);
    long long facA = factorial(M - N);

     计算组合数
    long long result = facM / (facN * facA);

    return result;
}

int main()
{
    int T;
    scanf("%d", &T);

    for (int t = 0; t < T; ++t) 
    {
        int N, M;
        scanf("%d %d", &N, &M);

         计算组合数并输出结果
        long long c = calculateCombination(N, M);
        printf("%lld\n", c);
    }

    return 0;
}

你可能感兴趣的:(算法,数据结构)