1245 Problem -AL-ACM CLUB晚会-入门题-数学-C++实现

问题 AL: ACM CLUB晚会

时间限制: 1 Sec  内存限制: 32 MB
提交: 140  解决: 31

题目描述

ACM CLUB的会员越来越多了,为此,ACM CLUB想为会员们准备一个晚会,晚会节目由会员们表演。消息一出,报名要表演节目的会员很多,多达N个,但是由于场地和时间有限,只能从这N个人中选M个,请问一共有多少种选择方法?

输入

数据的第一行是一个正整数T,接下来有T组数据,每组数据占一行。
每组数据包含两个整数N(来报名的人数,1<=N<=30),M(节目需要的人数0<=M<=30)。

输出

每组数据输出一个整数,每个输出占一行。

样例输入 Copy

5
3 2
5 3
4 4
3 6
8 0

样例输出 Copy

3
10
1
0
1

代码

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
//longlong 在此情况下也有可能会溢出,所以必须选择一个较小值来进行排列组合,进行运算优化
unsigned long long find(int a,int b){
  unsigned long long m=1,n=1;
  for (int i = 1; i <=b; i++)
  {
    m*=a;
    a--;
    n*=i;
  }
 unsigned long long cc=m/n;
  return (cc);
  
}
int main(){
  int num;
  int a,b;
  cin>>num;
  getchar();
  if(num>0){ 
      while(num--){
        cin>>a>>b;
        getchar();
        if(a>=1&&b>=0&&a<=30&&b<=30){
          if(a<b){
            cout<<0;
            if(num!=0){
              cout<<endl;
            }
          }
          else{
            
              if(b==0||a==b){
                cout<<1;
                if(num!=0){
                  cout<<endl;
                }
                continue;
              }

              int temp=b>(a-b)?(a-b):b;
              unsigned long long c=find(a,temp);
              cout<<c;
              if(num!=0){
                  cout<<endl;
              }        
        }
      }
    }
  }
}
发布了20 篇原创文章 · 获赞 0 · 访问量 114

猜你喜欢

转载自blog.csdn.net/weixin_31789689/article/details/104736901