其他分享
首页 > 其他分享> > 错排问题

错排问题

作者:互联网

在这里插入图片描述

#include<cstdio>
#include<cmath>
const double e=exp(1.0);//exp(1.0)是e=2.71…..
double p[21];//多一位存放'\0'
int main()
{
    double temp=1.0;

    int t,n,i;
    for(i=2;i<=20;i++)
    {
        temp*=i;//求阶乘
        p[i]=round(temp/e)/temp;//round是求四舍五入的值错排公式


//用四舍五入就不加0.5了再除以temp就是概率
    }
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        printf("%.2f%%\n",p[n]*100.0);//乘100改成百分数

    }
    return 0;
}

//全错的概率 = 全错数 / 全部情况。//全部情况就是N的阶乘。//全错数:1.将第N个数放在k位置,有n-1种。// 2.将第k个位置的数拿出来考虑,如果第k个数放在第N个位置,则剩下就是n-2个数全部排错情况;// 如果第k个数不是放在第N个位置,则就是n-1个数全部排错情况。//因此全错数就是a(n) = (n-1)*(a(n-1) + a(n-2))

标签:全错,1.0,int,double,个数,排错,问题,错排
来源: https://blog.csdn.net/weixin_45697774/article/details/102726575