递推 hdu 2048

t

关于错排

共n个数 

第n个 和一个交换  其他n-2错排  (n-1)*z[n-2];

n-1个错排 第n个和n-1个交换    (n-1)*z[n-1];

求和  

然后概率的话要除n!

一个一个除

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>

using namespace std;

#define MAXN 105
double z[MAXN];

int main()
{
    int t;
    z[1]=0;
    z[2]=1;
    for(int i=3;i<=20;i++)
        z[i]=(i-1)*(z[i-1]+z[i-2]);
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        double ans=z[n];
        for(int i=1;i<=n;i++)
            ans/=i;
        printf("%.2lf%%\n",ans*100);
    }
    return 0;
}

 

posted on 2016-12-30 15:15  HelloWorld!--By-MJY  阅读(99)  评论(0编辑  收藏  举报

导航