C语言程序,求组合数Cmn,哪里出错了

2025-02-24 05:14:46
推荐回答(2个)
回答1:

计算排列数时,计数错误。若起始条件不变,则循环条件应为i<=n或i

#include "stdio.h"
void main()
{
long m,n,i,fac,c,s=1;
scanf("m=%ld,n=%ld",&m,&n);
if(m<1||n<0||m else {
n=m<2*n?m-n:n;
for(s=1,i=n;i;i--) s*=m--;
for(fac=1,i=n;i;fac*=i--);
c=s/fac;
}
printf("c=%ld",c);
}

回答2:

错误1:scanf("m=%ld,n=%ld",&m,&n);语句不对,应为:scanf("%ld %ld",&m,&n);
错误2:循环求排列数Amn不对,多乘了一项,循环应为:for(i=1;i<=n;i++)

其实可以更简单,不用求排列数,只用调用求阶乘即可,因为C(m,n)=m!/[n!(m-n)!]