Quick actions

cmd+k|ctrl+k

Navigation

Languages

排列组合

Snippet info

Language

C

Visibility

public

Author

pheker

Created

2017-07-13T16:09:13Z

Updated

2017-07-14T01:09:14Z

#include <stdio.h>

#define MAX 100
int factorial(int n);

//缓存,空间换时间,动态规划思想
int fac[MAX];
int factorial(int n);

int A(int,int);
int C(int,int);
int Z(int,int);

int main(void) {
    printf("Hello World!\n");
    printf("%d!=%d\n",5,factorial(5));
    
    //A(n,m)=n×(n-1)....(n-m+1)=n!/(n-m)!
    //C(n,m)=P(n,m)/P(m,m) =n!/m!(n-m)!
    //Z(n,m)=C(n,n)*(c(n,1)+c(n,2)+...+c(n,m))  //n>=m>0
    
    printf("A(5,2)=%d\n",A(5,2));
    printf("C(5,2)=%d\n",C(5,2));
    printf("Z(5,2)=%d\n",Z(5,2));
    
    return 0;
}


// n!
int factorial(int n){
    return fac[n] = (n<=1||n>MAX)?1:(fac[n]?fac[n]:n*factorial(n-1));
}

//A(5,3)
int A(int n,int m){
    return factorial(n)/factorial(n-m);
}

int C(int n,int m){
    return A(n,m)/factorial(m);
}

int Z(int n,int m){
    int sum = 0;
    for(int i=1;i<=m;i++){
        sum += C(n,i);
    }
    return C(n,n)*sum;    
}




INFO