2068 RPG的错排(杭电)

#include<stdio.h>
long long zh(int k,int j);

int main()
{
    //本题采用递推关系求错排数,所以要先定义一个数组,且必须是long long 类型
    int i;
    long long a[26]={1.0}; //9
    for(i=2;i<14;i++)
    {
        a[i]=(i-1)*(a[i-1]+a[i-2]);
    }
    
    int n;
    while(scanf("%d",&n)!=EOF&&n)
    {
        long long total=0;
        for(i=2;i<=n/2;i++)
        {
            total+=zh(n,i)*a[i];
        }
        printf("%lld\n",total+1);
    }
    
    return 0;
}

//求组合数
long long zh(int k,int j) //C(k,j)
{
    long long x=1;
    for(int p=1;p<=j;p++)
            x=x*(k-p+1)/p;
        return x;
}

Guess you like

Origin blog.csdn.net/qq_59414507/article/details/120964963