编写一个程序,计算组合数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个的结果;编写代码如下:
- #include <stdio.h>
-
-
int cnr(int m, int n)
-
{
-
if(m == n || n == 0)
-
return 1;
-
else
-
return cnr(m-1, n) + cnr(m-1, n-1);
-
}
-
-
int main(int argc, char *argv[])
-
{
-
int m,n;
-
printf("please input m and n for C(m,n)\n");
-
scanf("%d %df", &m, &n);
-
printf("C(%d,%d) = %d\n", m, n, cnr(m,n));
-
return 0;
-
}
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
阅读(4983) | 评论(0) | 转发(1) |