买水果
时间限制:1000 ms | 内存限制:65535 KB
难度:0
- 描述
-
今天zz突然想吃水果了,然后他到超市去买水果,现超市有n个不同的水果,zz要买m个水果(m<=n);那么zz有多少种买水果的方式??
- 输入
- 输入T组数据(T<=100)
然后输入T行,每行输入两个数n,m(0< n < 2^31);
- 输出
- 每一行输出一个数(保证在0~2^31);
- 样例输入
-
2 4 2 3 3
- 样例输出
-
6 1
- 上传者
- ACM_张书军
分析:这是一道数学上的排列组合问题,另外数字比较大需要用到longlong的类型.
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; int main() { long long n,m; long long a,b,sum; int test; cin>>test; while(test--) { sum=1; scanf("%lld%lld",&n,&m); if(n-m<m) m=n-m; //使时间复杂度降了下来C(n,m)=C(n,n-m);如果没有的话会超时 b=m; for(long long i=n;i>n-m;i--) { sum=sum*i; while(sum%b==0&&b>1) //分子下面的从m到1的连乘 { sum=sum/b; b--; } } printf("%lld\n",sum); } }
时间: 2024-10-25 14:54:36