发布网友
共4个回答
热心网友
#include <stdio.h>
unsigned long combinNum(int m,int n)
{
int i;
unsigned long x=1;
if(n<0||n>m)return 0;
for(i=m;i>m-n;i--)
x=x*i/(m+1-i);
return x;
}
void main()
{
int m,n;
scanf("%d%d",&m,&n);
printf("%ld\n",combinNum(m,n));
}
热心网友
下面的C语言程序,fac函数用递归求n!,combinNum函数多次调用fac即可,应该算是非常简单的实现方法了:
long fac(int n)
{
if (n==0)
return 1;
else
return n*fac(n-1);
}
long combinNum(int m,int n)
{
return fac(m)/(fac(n)*fac(m-n));
}
热心网友
如果你不是高中搞比赛的,不要考虑时间与空间可以这样:
用C++:
#include "iostream.h"
int plus(int x,int y)
{
int k=1,i;
for (i=1;i<=x;i++) k=k*i;
for (i=1;i<=y;i++) k=k/i;
for (i=1;i<=x-y;i++) k=k/i;
return k;
};
void main()
{ int m,n;
cin>>m>>n;
cout<<plus(m,n);
};
hust phy
热心网友
#include <stdio.h>
typedef unsigned uint;
uint CC(uint m, uint n) // count for combinations
{
uint Amn = 1;
uint Ann = 1;
for(; n > 0; Amn *= m--, Ann *= n--);
return Amn / Ann;
}
int main()
{
printf("%d\n", CC(4,2));
}
参考资料:http://zhidao.baidu.com/question/377794.html