2200:Eddy's AC难题

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2200

方法:数学

思路:说实话,这个题出得不太清晰,看到网上的一些解释才算是弄懂了题意。题目意思是,给你n个人,先在其中选出一部分人,然后再把他们分成两组,问有多少种分法。其中题目中所说的分数要求在我看来基本没用,因为你根本不知道所有人的成绩,我们就假设成绩是排序好的,然后按照次序取人就可以了。这样的话,不难看出,首先在n个人里取人数可以从2人一直全部取到,不能取1人,因为后面还有分成两组呢!这就是c(n,m),然后在这些人中分两组,因为假设数列有序,所以这要所以在这组序列的插入一个挡板,分成两组,就可以了。m个数,一共有m-1的空隙,那么就有m-1种方案。

难点:本题虽说编码不难,但是数学的思维还是很有锻炼的!另外,我在这里用了double类型,主要是担心阶乘运算会轻松爆掉int,所以还是稳妥一些好。

#include<iostream>
#include<cstdio>
using namespace std;
double fac(int x)
{
    double ans = 1;
    for(double i = 1;i <= x;i++)
        ans *= i;
    return ans;
}
double cal_C(int n,int m)
{
    return fac(n)/(fac(n-m)*fac(m));
}
int main()
{
    int n;
    while(cin>>n)
    {
        double sum = 0.0;
        for(int i = 2;i <= n;i++)
            sum += (i-1)*cal_C(n,i);
        printf("%.0f\n",sum);
    }


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值