N個數中,選取M個數

從N個數中選取M個不同的數,共有多少種選法?並將結果打印出來。


解法:採用divide-conquer方法。

f(N,M) = f(N-1,M-1) + f(N-1, M); 


具體代碼如下:

#include<stdio.h>


#define N  100
#define M  5
int total = 0;
int func(int n, int m, int *stack)
{
    int i;
    if ( m == 1)
    {
        for( i = n; i > 0; i-- ){
          //printf("%d, %d, %d, %d, %d \n",stack[5], stack[4], stack[3], stack[2], i ); 
          total++;
        }


    }
    if( m > 1){




            stack[m] = n;
            func( n-1, m-1, stack);


        stack[m] = 0;
        if( n-1 >= m )
          func(n-1, m, stack);
    }








    return 0;


}
int main()
{
    int i, j;
    int stack[M+1];
    func( N, M, stack);
    printf("total = %d \n", total);


    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章