NYOJ459快速组合数
#include<stdio.h>
int main()
{
int m,n,a,b;int ans=1;
scanf("%d%d",&n,&m);
a=n-m+1;
b=1;
while(a<=n&&b<=m)
{
ans=ans*a/b;
// printf("%d %d %d\n",a,b,ans);//调试
a++;
b++;
}
printf("%d\n",ans);
return 0;
}
//c(8,3)=6*7*8/(1*2*3)
第二种方法
c(n,m)=n!/(m!*(n-m)!)
第三种递归
#include<stdio.h>
#define ERROR 0
int fun(int n,int r)
{
if(n<r)
return ERROR;//ERROR先要预先定义,不知为啥,分号为英文状态下,刚开始没想起n<r的情况,也必须加上n==r的情况,否则错误。
else
{if(1==n||0==r||n==r)
return 1;
else
return (fun(n-1,r-1)+fun(n-1,r));
}
}
int main()
{
int n,r;
scanf("%d%d",&n,&r);
printf("%d\n",fun(n,r));
return 0;
}
作者:火星十一郎
本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

浙公网安备 33010602011771号