NYOJ---1131买水果

时间:2015-04-07 09:53:44   收藏:0   阅读:213

买水果

时间限制: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);
    }
}


原文:http://blog.csdn.net/qq_qingtian/article/details/44906449

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!