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; }
作者:火星十一郎
本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.