c语言用函数求组合数 编写函数求组合数

C语言编程实现求组合数P=C(n,k)的值

double

十余年的松阳网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销的优势是能够根据用户设备显示端的尺寸不同,自动调整松阳建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“松阳网站设计”,“松阳网站推广”以来,每个客户项目都认真落实执行。

lnchoose(int

n,

int

m)

{

if

(m

n)

{

return

0;

}

if

(m

n/2.0)

{

m

=

n-m;

}

double

s1

=

0;

for

(int

i=m+1;

i=n;

i++)

{

s1

+=

log((double)i);

}

double

s2

=

0;

int

ub

=

n-m;

for

(int

i=2;

i=ub;

i++)

{

s2

+=

log((double)i);

}

return

s1-s2;

}

double

choose(int

n,

int

m)

{

if

(m

n)

{

return

0;

}

return

exp(lnchoose(n,

m));

}

用之前调用math.h头文件,用的话直接把值赋给choose()这个函数即可,直接调用上面的函数,返回一个double数值,可追问

用C语言求组合数

实现的算法很多, 下面给出一个不需要递归的算法; 需要设计两个函数。

unsigned long factorial (unsigned long n);

long long perm(unsigned long m, unsigned long n);

unsigned long factorial (unsigned long n)

{

unsigned long value = (n == 0) ? 1 : n;

while( n = 2 )

value *= --n;

return value;

}

long long perm(unsigned long m, unsigned long n)

{

if (m n)

return -1;

else

return (unsigned long) (factorial(n)/factorial(n-m));

}

只为了mn就要返回-1, 有点浪费啊~~~

注意求值范围, 如果需要可以int64扩展。。。

C语言求组合数

double fact(long num)

{

for (long i = 1; num  0; num--)

{

i *= num;

}    

}

int main()

{

long m;

long n;

long C;

scanf("%ld %ld", m, n);

C = fact(n) / ((fact(m)) * fact(n-m));

printf("%ld",C);

return 0;

}


本文名称:c语言用函数求组合数 编写函数求组合数
URL标题:http://ybzwz.com/article/hhcdso.html