Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2507325
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2011-05-18 18:23:33

    编写一个程序,计算组合数Cmn
    在高中的时候,我们在数学课上,老师讲过这个概念。组合数也只是考虑选取的方案的种类数,而不考虑每个方案中的内部排序。如从5个中选取2个,组合数为(1,2),(1,3),(1,4)(1,5),(2,3),(2,4),(2,5),(3,4),(3,5),(4,5)共十种情况,我们用程序该如何去实现呢?
    其实,我们可以将时间分成两个事件:1.不选取5,从1-4中任意选取2个;2.选取5,然后从1-4中选取其中的1个。这两种情况合起来,就是从5中选取2个的结果;编写代码如下:
  1. #include <stdio.h>

  2. int cnr(int m, int n)
  3. {
  4.   if(m == n || n == 0)
  5.     return 1;
  6.   else
  7.     return cnr(m-1, n) + cnr(m-1, n-1);
  8. }

  9. int main(int argc, char *argv[])
  10. {
  11.   int m,n;
  12.   printf("please input m and n for C(m,n)\n");
  13.   scanf("%d %df", &m, &n);
  14.   printf("C(%d,%d) = %d\n", m, n, cnr(m,n));
  15.   return 0;
  16. }
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ gcc 6.13.c
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out 
please input m and n for C(m,n)
5 2
C(5,2) = 10

阅读(4899) | 评论(0) | 转发(1) |
0

上一篇:QT实现截屏功能

下一篇:递归法求幂

给主人留下些什么吧!~~