Problem Description
开学了,杭电又迎来了好多新生。ACMer想为新生准备一个节目。来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法?
Input
数据的第一行包括一个正整数T,接下来有T组数据,每组数据占一行。 每组数据包含两个整数N(来报名的人数,1<=N<=30),M(节目需要的人数0<=M<=30)
Output
每组数据输出一个整数,每个输出占一行
Sample Input
5 3 2 5 3 4 4 3 6 8 0
Sample Output
3 10 1 0 1
方法一: 为防止溢出,可以采用乘一个除一个的方法。
View Code
#includeint main() { __int64 i,n,m,sum; int t; while(scanf("%d",&t)!=EOF) while(t--) { scanf("%I64d%I64d",&n,&m); if(n
方法二: 利用公式 C(n,m)=C(n-1,m)+C(n-1,m-1) 打表。
View Code
#include#include int main() { int a[31][31]; int i,j,t,n,m; memset(a,0,sizeof(a)); a[0][0]=a[1][1]=a[1][0]=1; for(i=2;i<=30;i++) for(j=0;j<=i;j++) a[i][j]=a[i-1][j]+a[i-1][j-1]; while(scanf("%d",&t)!=EOF) while(t--) { scanf("%d%d",&n,&m); if(n