本文共 1089 字,大约阅读时间需要 3 分钟。
计算组合数
Time Limit: 1000 ms Memory Limit: 32768 KiBProblem Description
计算组合数。C(n,m),表示从n个数中选择m个的组合数。 计算公式如下: 若:m=0,C(n,m)=1 否则, 若 n=1,C(n,m)=1 否则,若m=n,C(n,m)=1 否则 C(n,m) = C(n-1,m-1) + C(n-1,m).Input
第一行是正整数N,表示有N组要求的组合数。接下来N行,每行两个整数n,m (0 <= m <= n <= 20)。Output
输出N行。每行输出一个整数表示C(n,m)。 Sample Input 3 2 1 3 2 4 0 Sample Output 2 3 1代码如下:
第一种方式函数:#include#include int c(int n,int m){ int y; if(m==0)y=1; else if(n==1)y=1; else if(m==n)y=1; else y=c(n-1,m-1)+c(n-1,m); return y;}int main(){ int n,m,t; scanf("%d",&t); while(t--) { scanf("%d%d",&m,&n); printf("%d\n",c(m,n)); } return 0;}
第二种方式数组:
#include#include int main(){ int n,m,t; int s[21][21]; for(n=1;n<=20;n++) { for(m=0;m<=20;m++) { if(m==0)s[n][m]=1; else if(n==1)s[n][m]=1; else if(m==n)s[n][m]=1; else s[n][m]=s[n-1][m-1]+s[n-1][m]; } } scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); printf("%d\n",s[n][m]); } return 0;}
转载地址:http://pzhwi.baihongyu.com/