版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/83829739
【要点】:
1、阶乘
2、错排公式。
错排公式:D(1)=0,D(2)=1,D(n) = (n-1)*(D(n-1) + D(n-2))。
阶乘则是用循环来算。
AC代码:
#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
int i,T,n;
//a表示阶乘,b表示错排
double a[21]={1,1,2},b[21]={0,0,1};
for(i=3;i<=20;i++)
{
a[i]=a[i-1]*i;
b[i]=(i-1)*(b[i-1]+b[i-2]);
}
cin>>T;
while(T--)
{
cin>>n;
printf("%.2lf",100*b[n]/a[n]);
cout<<"%"<<endl;
}
return 0;
}