錯排公式,推導過程見百度
有一個大坑是輸出內容有%號時必須用printf("%%"),不能用printf("%")
#include<cstdio>
#include<iostream>
using namespace std;
long long int factorial(int n)
{
long long m=1;
for(int i=2;i<=n;i++)
{
m*=i;
}
return m;
}
int main()
{
int n,m;
long long d[22];
d[0]=d[1]=0,d[2]=1;
for(int i=3;i<22;i++)
{
d[i]=(i-1)*(d[i-1]+d[i-2]);
}
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
printf("%.2lf%%\n",d[m]*100.0/factorial(m));
}
return 0;
}