错排问题
作者:互联网
#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