重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
举个例子 不太明白是什么组合数
网站设计制作过程拒绝使用模板建站;使用PHP+MYSQL原生开发可交付网站源代码;符合网站优化排名的后台管理系统;网站设计制作、网站建设收费合理;免费进行网站备案等企业网站建设一条龙服务.我们是一家持续稳定运营了10年的创新互联网站建设公司。
补充======
说白了就是求阶乘
fun是阶乘函数
直接调用即可
#include stdio.h
long sum=0;//组合数结果
long fun(int i) //阶乘
{
If(n==1)
return 1 ; /*递归出口*/
else
return i*fun(i-1); /*递归体*/
}
long com(int n, int m)
{
sum=fun(m)/fun(n)*fun(m-n);
return sum;
}
int main(void)
{
int m=9,n=4;
printf("%l" , com(4,9));
return 0;
}
#include stdio.h
int comb(int n, int m)
{
if (m==1)return n;
if (n==m||m==0)return 1;
return comb(n-1, m-1)+comb(n-1, m);
}
int main()
{
printf ("%d\n", comb(2, 1));
return 0;
}
long fact(int n) //阶乘函数
{
if(n==1) return n;
return n*fact(n-1);
}
long compile(int n,int k) //组合函数
{
retrun fact(n)*1.0/fact(k)/fact(n-k);
}
-------------------------------------------------------------------
剩下的计算 nCk你自己消化
典型的组合问题,解法有递归、回溯等等
递归法较简单,代码如下:
void combine(int a[], int n, int m, int b[], int M);
参数:
a 存放候选数字
n 总项数
m 取出项数
b 存放选出结果
M = m
#include "stdio.h"
#define MAX 100
void combine(int a[], int n, int m, int b[], int M);
int main(void)
{
int i;
int a[MAX], b[MAX];
for (i = 1; i 100; i++)
a[i - 1] = i;
combine(a, 5, 4, b, 4);
}
void combine(int a[], int n, int m, int b[], int M)
{
int i, j;
for (i = n; i = m; i--)
{
b[m - 1] = i - 1;
if (m 1)
combine(a, i - 1, m - 1, b, M);
else
{
for (j = M - 1; j = 0; j--)
printf("%d ", a[b[j]]);
printf("\n");
}
}
}
其他方法可查阅相关资料。