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
就是组合公式的应用! c(n,m) = n!/(n-m)!/m!;
注意!此题用long可能会过不了、 不过如果你在算乘的时候去除的话,应该是可以过的。 我在这里是用double过的。
代码语言:javascript复制import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t =sc.nextInt();
while(t-->0){
int n =sc.nextInt();
int m=sc.nextInt();
double num = group(n,m);
System.out.printf("%.0f",num);
System.out.println();
}
}
private static double group(int n, int m) {
if(m>n){
return 0;
}
if(m==0){
return 1;
}
int h=n-m;
if(n-m>m){
h=m;
m=n-m;
}
double s=1;
for(int i=n;i>=m 1;i--){
s*=i;
}
double k=1;
for(int i=1;i<=h;i ){
k*=i;
}
return s/k;
}
}