组合数:
C语言求组合数不能直接使用数学公式C(n,m)=(m!)/(n!*(n-m)!);
公式变形:
(m!)/(n!*(m-n)!)=(m*(m-1)*(m-2)*…*(m-n+2)*(m-n+1))/(n!)=((m-n+1)/1)*((m-n+2)/2)*((m-n+3)/3)*…*((m-n+n)/n)=∏((m-n+k)/k)【k=1,2,3,…,n】
codes:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,n,k,s=1;
while(scanf("%d%d",&m,&n)!=-1)
{
s=1;
for(k=1;k<=n;k++)
s=s*(m-n+k)/k;
printf("%d\n",s);
}
// printf("Hello world!\n");
return 0;
}
排列数:
p(n,m)=n(n-1)(n-2)……(n-m+1)= n!/(n-m)!
codes:
for(i=n-m+1;i<=n;i++)
s=s*i;