题目是这样的:

求组合数:求n个数中K个数的组合,假设函数原型为  intcombination (int n,int k ),其中  n 的范围为  1 ……n,

例如:combination(5 ,3 ) 要求输出:543、542 、541 、531 、532 、521 、432 、431 、421 、321 如果输出时有用到数组,其空间需要在开始动态分配好,结束时释放。

第一想法是5!/3!/2!o(╯□╰)o

写程序的话其实很简单了,我用的递归,递归注意下结束条件就可以了:

Code Snippet
  1. /*
  2. * =====================================================================================
  3. *       Filename:  intcombination.c
  4. *    Description:  求n个数中k个数的组合
  5. *
  6. *        Version:  1.0
  7. *        Created:  08/25/2012 05:08:13 PM
  8. *
  9. *         Author:  zhy (), [email protected]
  10. * =====================================================================================
  11. */
  12. #include <stdio.h>
  13.  
  14. int combination(int n, int k)
  15. {
  16.     if (k>n || k<0)
  17.     {
  18.         return 0;
  19.     }
  20.  
  21.     if (k == 0)
  22.     {
  23.         return 1;
  24.     }
  25.  
  26.     int totalCounts = 0;
  27.     int i = n;
  28.     for ( ;i >= k; --i)
  29.     {
  30.         totalCounts += combination(i-1, k-1);
  31.     }
  32.  
  33.     return totalCounts;
  34. }
  35.  
  36. int main()
  37. {
  38.     int a, b;
  39.     scanf("%d %d",&a,&b);
  40.     printf("%d\n", combination(a,b));
  41.  
  42.     return 0;
  43. }

好吧,写这篇日志其实是为了测试下这个插件好用不好用。。。